Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:从行到列的大小写_Sql_Sql Server_Case - Fatal编程技术网

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谢谢。看起来棒极了!