Я столкнулся с сложной ситуацией, когда мне известно о подходе, который может решить проблему, но предложение order by в моей производной таблице испортило пользовательский сортировку. Вот мои данные ввода и вывода и то, что я пробовал.Выполнение пользовательского сортировки, включающего предложение order by в производной таблице
схемы: - Вход: -
CREATE TABLE Test(Rowname VARCHAR(10), Col1 DATETIME, Col2 DATETIME, Col3 DATETIME, Col4 DATETIME);
INSERT INTO Test VALUES('Row1', '2016-01-14', '2016-01-08', '2016-01-30', '2016-01-01');
INSERT INTO Test VALUES('Row2', '2016-01-02', '2016-01-01', '2016-01-18', '2016-01-15');
Ожидаемый результат: -
RowName Result
Row1 Col4,Col2,Col1,Col3
Row2 Col2,Col1,Col4,Col3
То, что я пытался?
WITH CTE(RowName,Colmn,RN) AS
(
SELECT RowName,Colmn,ROW_NUMBER() OVER(PARTITION BY RowName ORDER BY RowName) AS RN
FROM
(
(SELECT RowName,Col1 AS Col,'Col1' AS Colmn FROM Test)
UNION ALL
(SELECT RowName,Col2 AS Col,'Col2' AS Colmn FROM Test)
UNION ALL
(SELECT RowName,Col3 AS Col,'Col3' AS Colmn FROM Test)
UNION ALL
(SELECT RowName,Col4 AS Col,'Col4' AS Colmn FROM Test)
) Z
ORDER BY RowName,Col
)
SELECT RowName,
MAX((CASE WHEN RN = 1 THEN Colmn END)) + ',' +
MAX((CASE WHEN RN = 2 THEN Colmn END)) + ',' +
MAX((CASE WHEN RN = 3 THEN Colmn END)) + ',' +
MAX((CASE WHEN RN = 4 THEN Colmn END)) AS Result
FROM CTE
GROUP BY RowName;
Примечание: -
заказ по RowName, Col пункта во внутреннем запросе/производной таблицы не удается, поскольку это не допускается в SQL Server. Если я не использую этот ORDER BY, то как я могу выполнить пользовательский сортировку без использования предложения ORDER BY?