Как упорядочить по строкам, а затем по столбцам в динамическом стержне - PullRequest
0 голосов
/ 23 апреля 2019

Я создал временную таблицу со всеми данными, которые я хочу.Затем я извлекаю данные с помощью динамического центра и пытаюсь выяснить, как сортировать по строкам, а затем поворачивать столбцы.У меня есть сортировка строк, но я не могу понять, как сортировать по поворотным столбцам.

SET @COLS = N'';
SET @COLS2 = N'';

SELECT @COLS += N', ISNULL(' + QUOTENAME(PivotedName) + ',0) AS ' + QUOTENAME(PivotedName), @COLS2 += N', ' + QUOTENAME(PivotedName)
FROM    (SELECT DISTINCT(PivotedName) FROM #TEMP1 T1) AS X;

SET @SQL = N'
SELECT [ID#],[Name],' + STUFF( @COLS, 1, 2, '') + '
FROM        
(
    SELECT T1.[ID#], T1.[Name], T1.PivotedName, T1.PivotedAggregate FROM #TEMP1 T1 

) AS C
PIVOT 
(
    MAX(PivotedAggregate) FOR PivotedName IN (' + STUFF(REPLACE(@COLS2, ', [', ',['), 1, 1, '') + ')
) AS P

ORDER BY [ID#] DESC
;';


EXECUTE SP_EXECUTESQL @SQL;

Результаты возвращаются так, где они сортируются по ID # DESC, который я хочу.Но во-вторых, я бы хотел, чтобы они сортировались по «PivotName», но не по алфавиту, а по другому столбцу «SortOrder», который доступен в # TEMP1.

Фактические результаты:

ID# Name    PivotName1  PivotName4  PivotName3  PivotName2
10  Jon     10          0.91            9           0.91
9   Jane    8           15.8            14          0.8
8   Tom     6           0.84            6           0.84
7   Steve   3.37        0.85            37.5        0.99
6   Bob     0.75        0.73            0.75        0.73

Желательнорезультаты:

ID# Name    PivotName1  PivotName2  PivotName3  PivotName4
10  Jon     10          0.91        9           0.91
9   Jane    8           0.8         14          15.8

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

SELECT @COLS += N', ISNULL(' + QUOTENAME(PivotedName) + ',0) AS ' + QUOTENAME(PivotedName), @COLS2 += N', ' + QUOTENAME(PivotedName)
FROM    (SELECT DISTINCT(PivotedName), SortOrder FROM #TEMP1 T1) AS X ORDER BY SortOrder;

Понял. Я вытащил сортировщик из временной таблицы для сортировки, но не использовал его в своем последнем sql. Спасибо за обсуждение.

0 голосов
/ 24 апреля 2019

Как я уже сказал, вам нужно добавить ORDER BY. Просто измените:

SELECT @COLS += N', ISNULL(' + QUOTENAME(PivotedName) + ',0) AS ' + QUOTENAME(PivotedName), @COLS2 += N', ' + QUOTENAME(PivotedName)
FROM    (SELECT DISTINCT(PivotedName) FROM #TEMP1 T1) AS X;

К

SELECT @COLS += N', ISNULL(' + QUOTENAME(PivotedName) + ',0) AS ' + QUOTENAME(PivotedName), @COLS2 += N', ' + QUOTENAME(PivotedName)
FROM    (SELECT DISTINCT(PivotedName) FROM #TEMP1 T1) AS X ORDER BY PivotedName;
...