SQL Server:从行到列的大小写
我有一个包含两列的表:SQL Server:从行到列的大小写,sql,sql-server,case,Sql,Sql Server,Case,我有一个包含两列的表: CREATE TABLE Prop_Cl ( Id int, ClId int ); INSERT INTO Prop_Cl (Id, ClId) VALUES (1, 1111111), (1, 1111112), (1, 1111113), (2, 2222221), (3, 3333331), (3, 3333332); ID CLID 1 1111111 1 1111112 1 1111113 2
CREATE TABLE Prop_Cl
(
Id int,
ClId int
);
INSERT INTO Prop_Cl
(Id, ClId)
VALUES
(1, 1111111),
(1, 1111112),
(1, 1111113),
(2, 2222221),
(3, 3333331),
(3, 3333332);
ID CLID
1 1111111
1 1111112
1 1111113
2 2222221
3 3333331
3 3333332
我正试图以这种方式展示这张表:
ID CLIENT 1 CLIENT 2 CLIENT 3 CLIENT 4
1 1111111 1111112 1111113 0
2 2222221 0 0 0
3 3333331 3333332 0 0
谨此声明:
SELECT p.Id,
CASE WHEN (ROW_NUMBER() OVER(PARTITION BY p.Id ORDER BY p.Id)) = 1 THEN p.ClId ELSE 0 END AS 'Client 1',
CASE WHEN (ROW_NUMBER() OVER(PARTITION BY p.Id ORDER BY p.Id)) = 2 THEN p.ClId ELSE 0 END AS 'Client 2',
CASE WHEN (ROW_NUMBER() OVER(PARTITION BY p.Id ORDER BY p.Id)) = 3 THEN p.ClId ELSE 0 END AS 'Client 3',
CASE WHEN (ROW_NUMBER() OVER(PARTITION BY p.Id ORDER BY p.Id)) = 4 THEN p.ClId ELSE 0 END AS 'Client 4'
FROM Prop_Cl p
但我得到的结果是:
ID CLIENT 1 CLIENT 2 CLIENT 3 CLIENT 4
1 1111111 0 0 0
1 0 1111112 0 0
1 0 0 1111113 0
2 2222221 0 0 0
3 3333331 0 0 0
3 0 3333332 0 0
我无法使用PIVOT函数,因为我实现了Sql Server。
每个ID中最多有4个客户端。
有什么想法吗?
我将稍微更改语法,以使用聚合函数和子查询,类似于:
select id,
max(case when seq = 1 then ClId else 0 end) Client1,
max(case when seq = 2 then ClId else 0 end) Client2,
max(case when seq = 3 then ClId else 0 end) Client3,
max(case when seq = 4 then ClId else 0 end) Client4
from
(
select Id, ClId,
ROW_NUMBER() OVER(PARTITION BY Id ORDER BY Id) seq
from Prop_Cl
) s
group by id;
请参见由于sql server实现,您不能使用pivot是什么意思?我不确定,但我的MS sql server 2008实现了sql server 2000谢谢。看起来棒极了!