Преобразование строк в столбцы SQL Server, T-SQL - PullRequest
0 голосов
/ 22 марта 2012

У меня есть функция, которая выдает несколько строк в виде строковых значений. Значения следующие:

[12*02]
[12*03]
[12*04]
[12*05]
[12*06]
[12*07]
[12*08]
[12*09]
[12*10]
[12*11]
[12*12]
[12*13]
[12*14]
[12*15]

Значения на самом деле разные строки. Таким образом, [12 * 01] - это строка 1, а [12 * 02] - строка № 2 и так далее. Я хочу использовать эти значения в качестве заголовков столбцов. Поэтому [12 * 01] - это столбец 1, а [12 * 02] - это столбец 2 и так далее. Я бы использовал pivot, но эта строка будет меняться каждый раз, и именно поэтому я не хочу использовать pivots. Это не домашнее задание колледжа, и я думал только об использовании функций RANK и номеров строк.

Любая помощь будет оценена.

1 Ответ

1 голос
/ 22 марта 2012

Вам все равно придется использовать pivot (или вариант с ручной кодировкой aggregate_function (CASE)), но вы можете сделать это динамически.Создайте процедуру, принимающую список заголовков столбцов, разделенных запятыми, и подготовьте sql-код для сводной переменной в переменной varchar, поместив заполнители там, где должен быть список.Это позволяет вам сохранить сводный код в таблице или прочитать определение представления в переменную varchar, чтобы помочь вам с проверкой синтаксиса.После этого замените местозаполнители фактическим списком и выполните команду pivot.

create proc ExecPivot (@PivotedList nvarchar(max))
as
   set nocount on

   declare @sql nvarchar(max)
   set @sql = N'
       select ColumnList, [PLACEHOLDER]
       from TableA
       pivot 
       (
          min(Value)
          for Key in ([PLACEHOLDER])
       ) a'
   set @sql = REPLACE(@sql, '[PLACEHOLDER]', @PivotedList)
   print @sql
   exec sp_executesql @sql

Существует хорошая ссылка для , объединяющей много строк в одну текстовую строку .Вероятно, он понадобится вам для параметра @PivotedList.

Надеюсь, я не совсем прав: -)

...