поворот на столбце, не зная весь список значений - PullRequest
5 голосов
/ 11 марта 2010

у меня есть стол

Title            Name             Type
------------------------------------------------
T1               A                Primary
T1               B                Primary
T2               B                Primary
T2               C                Secondary
T2               D                Secondary

Мне нужно, чтобы вывод был

Title            Primary          Secondary
------------------------------------------------
T1               A, B             NULL/Blank
T2               B                C, D

Столбец [Имя] в исходной таблице может иметь любое значение. позже могут быть E, F, G и т. д.

Как это можно сделать?

1 Ответ

8 голосов
/ 11 марта 2010

Тогда вам нужен динамический SQL. Рассмотрим что-то вроде этого для генерации списка столбцов:

DECLARE @collist nvarchar(max);
SELECT @collist = STUFF((SELECT ', ' + quotename(Type) FROM YourTable GROUP BY Type FOR XML PATH('')), 1, 2, '');

Теперь вы можете использовать @collist для создания нужного запроса, который вы затем запускаете, используя sp_executesql

Как это:

DECLARE @collist nvarchar(max);
SELECT @collist = STUFF((SELECT ', ' + quotename(Type) FROM YourTable GROUP BY Type FOR XML PATH('')), 1, 2, '');

DECLARE @qry nvarchar(max);
SET @qry = N'
SELECT Title, ' + @collist + '
FROM 
(
    SELECT t.Title, t.Type, (SELECT STUFF((SELECT '', ''  + t2.Name FROM YourTable t2 WHERE t2.Title = t.Title AND t2.Type = t.Type ORDER BY t2.Name FOR XML PATH('''')),1,2,'''')) AS Names
    FROM YourTable t
    GROUP BY t.Type, t.Title
) tg
pivot (max(Names) for tg.Type in (' + @collist + ')) p
';
exec sp_executesql @qry;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...