2010-07-06 3 views
-1

Я пытаюсь для того чтобы достигнуть этого:Преобразование строк в столбцы с неизвестным количеством элементов

Начальная таблица:

PARM1 |PARM2 |DATE 
------------------- 
VALUE1|VALUE2|DATE1 

VALUE3|VALUE4|DATE2 

Окончательный результат:

PARM |DATE1 |DATE2 |... 
----------------------- 
PARM1|VALUE1|VALUE3|... 

PARM2|VALUE2|VALUE4|... 

Короче говоря, я хочу конвертировать мой имена параметров в строки и иметь столбец для каждой даты, где ячейки содержат значения параметров для даты и параметра.

До сих пор мне удалось получить это:

SELECT * 
FROM 
(
    SELECT [Parameter], [DATE], VALUE 
    FROM 
    (
     SELECT PARM1, PARM2 FROM PARAMETER_VALUES 
    ) SOURCE_TABLE 
    UNPIVOT 
    (
     VALOR FOR [Parameter] IN (PARM1, PARM2) 
    ) UNPIVOTED_TABLE 
) T 

Проблема заключается в том, что я не могу откинуть результаты сейчас, потому что я не знаю, сколько ДАТЫ есть. Я хочу, чтобы он был динамичным.

Возможно ли это?

+0

Звучит как структура EAV, которая пришла, чтобы укусить вас сзади. По сути, базы данных не предназначены для динамического создания столбцов. Итак, если это то, что вы хотите сделать, вы должны сделать это за пределами базы данных в средстве среднего уровня или в инструменте отчетности. – Thomas

+0

Если вы отправляете код, XML или фиксированные структуры таблиц, ** пожалуйста ** выделите эти строки в текстовом редакторе и нажмите кнопку «код» (101 010) на панели инструментов редактора, чтобы красиво отформатировать и выделить синтаксис! –

ответ

0

Короче говоря, вы не можете использовать команду PIVOT с неизвестными столбцами.

Ваш единственный вариант - получить данные и переформатировать, используя динамический SQL или какой-то внешний интерфейс.

0

Вы можете поворачивать, используя динамические столбцы, если вы создаете опорный элемент перед рукой.

SELECT @listColYouwantInPivot= STUFF((SELECT distinct '], [' + [columnName] 
          FROM  tableName 
         FOR 
          XML PATH('') 
         ), 1, 2, '') + ']' 

Просто подключите @listColYouwantInPivot в операторе поворота с конкатенации позже.

Смежные вопросы