У меня есть следующие тестовые данные TSQL:
IF OBJECT_ID('dbo.emp') IS NOT NULL
DROP TABLE dbo.emp;
CREATE TABLE dbo.emp (name NVARCHAR(10), dept NVARCHAR(10));
GO
INSERT INTO dbo.emp (name, dept)
VALUES
(N'user1', N'dept1'),
(N'user2', N'dept1'),
(N'user3', N'dept2'),
(N'user4', N'dept2'),
(N'user5', N'dept2'),
(N'user6', N'dept3');
Как я могу повернуть данные, а также получить детали каждой строки?Результат, который я хочу получить:
+-------+-------+-------+
| dept1 | dept2 | dept3 |
+-------+-------+-------+
| user1 | user3 | user6 |
| user2 | user4 | NULL |
| NULL | user5 | NULL |
+-------+-------+-------+
Сейчас я пришел с этим запросом:
WITH
cte1 AS (
SELECT name dept1,
ROW_NUMBER() OVER (ORDER BY name) row
FROM dbo.emp
WHERE
dept = 'dept1'
),
cte2 AS (
SELECT name dept2,
ROW_NUMBER() OVER (ORDER BY name) row
FROM dbo.emp
WHERE
dept = 'dept2'
),
cte3 AS (
SELECT name dept3,
ROW_NUMBER() OVER (ORDER BY name) row
FROM dbo.emp
WHERE
dept = 'dept3'
)
SELECT cte1.dept1,
cte2.dept2,
cte3.dept3
FROM cte1
FULL OUTER JOIN cte2
ON cte2.row = cte1.row
FULL OUTER JOIN cte3
ON cte3.row = cte1.row;
Это дает мне правильный результат.Однако, когда я изменяю демонстрационные данные на:
IF OBJECT_ID('dbo.emp') IS NOT NULL
DROP TABLE dbo.emp;
CREATE TABLE dbo.emp (name NVARCHAR(10), dept NVARCHAR(10));
GO
INSERT INTO dbo.emp (name, dept)
VALUES
(N'user1', N'dept1'),
(N'user2', N'dept1'),
(N'user3', N'dept2'),
(N'user4', N'dept2'),
(N'user5', N'dept2'),
(N'user6', N'dept3'),
(N'user7', N'dept3'),
(N'user8', N'dept3');
Упомянутый ниже запрос дает:
+-------+-------+-------+
| dept1 | dept2 | dept3 |
+-------+-------+-------+
| user1 | user3 | user6 |
| user2 | user4 | user7 |
| NULL | user5 | NULL |
| NULL | NULL | user8 |
+-------+-------+-------+
Это не то, что я хочу.Результат, который я ожидаю:
+-------+-------+-------+
| dept1 | dept2 | dept3 |
+-------+-------+-------+
| user1 | user3 | user6 |
| user2 | user4 | user7 |
| NULL | user5 | user8 |
+-------+-------+-------+
Обратите внимание, что имена пользователей упорядочены в каждом столбце.Надеюсь, кто-то может указать мне правильное направление.