Sql server 使用'将行转换为列;枢轴';前五名
我想要一个来自SQL表的数据透视表,其中包含前3条记录,并且只包含基于用户的过滤器Sql server 使用'将行转换为列;枢轴';前五名,sql-server,pivot-table,Sql Server,Pivot Table,我想要一个来自SQL表的数据透视表,其中包含前3条记录,并且只包含基于用户的过滤器 ID PrOjID User piD ------- ---- ------ ------ 1 Prj1 ABC 1 2 Prj2 XYZ 2 3 Prj3 ABC 3 4 Prj4 AB
ID PrOjID User piD
------- ---- ------ ------
1 Prj1 ABC 1
2 Prj2 XYZ 2
3 Prj3 ABC 3
4 Prj4 ABC 4
5 Prj5 PQR 5
6 Prj1 XYZ 1
7 Prj3 PQR 3
8 Prj8 ABC 8
9 Prj1 PQR 1
10 Prj10 ABC 10
11 Prj11 ABC 11
12 Prj12 ABC 12
当用户是ABC时我想要的结果
ID1 PROJID1 piD1 ID2 PROJID2 piD2 ID3 PROJID3 piD3
1 prj1 1 3 PRJ3 3 4 prj4 4
如果用户是xyz
ID1 PROJID1 piD1 ID2 PROJID2 piD2 ID3 PROJID3 piD3
2 prj2 2 1 PRJ1 1 null null null
我们可以在
行编号的帮助下使用枢轴来处理此问题:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY [User] ORDER BY piD) rn
FROM yourTable
)
SELECT
[User],
MAX(CASE WHEN rn = 1 THEN ID END) AS ID1,
MAX(CASE WHEN rn = 1 THEN PrOjID END) AS PROJID1,
MAX(CASE WHEN rn = 1 THEN piD END) AS piD1,
MAX(CASE WHEN rn = 2 THEN ID END) AS ID2,
MAX(CASE WHEN rn = 2 THEN PrOjID END) AS PROJID2,
MAX(CASE WHEN rn = 2 THEN piD END) AS piD2,
MAX(CASE WHEN rn = 3 THEN ID END) AS ID3,
MAX(CASE WHEN rn = 3 THEN PrOjID END) AS PROJID3,
MAX(CASE WHEN rn = 3 THEN piD END) AS piD3
FROM cte
WHERE
[User] = 'ABC'
GROUP BY
[User];