2016-03-04 79 views
0

我有值的表出现如下:拆分单一列值

+--------+----+--------+ 
| Client | ID | Amount | 
+--------+----+--------+ 
| A  | 1 | 100 | 
| B  | 2 |  10 | 
| C  | 1 |  80 | 
| C  | 2 |  15 | 
| D  | 2 |  20 | 
| E  | 1 |  75 | 
| E  | 2 |  10 | 
| F  | 1 |  90 | 
+--------+----+--------+ 

我希望做的是能够与量上此表报告的列值分割基于该ID,所以会出现这样的:

+--------+------+------+ 
| Client | ID 1 | ID 2 | 
+--------+------+------+ 
| A  | 100 |  | 
| B  |  | 10 | 
| C  | 80 | 15 | 
| D  |  | 20 | 
| E  | 75 | 10 | 
| F  | 90 |  | 
+--------+------+------+ 

我想关键是其中一个客户同时具有ID 1和2会出现在单个行而不是多个。

任何想法的方式来做到这一点,将不胜感激。

回答

1
/* 
sql server 2012 
the code below can run at above 2000 
*/ 
set nocount on 
;with sourceData as 
(
    select * 
    from (values('A',1,100), 
       ('B',2,10), 
       ('C',1,80), 
       ('C',2,15), 
       ('D',2,20), 
       ('E',1,75), 
       ('E',2,10), 
       ('F',1,90))as b(Client,ID,Amount) 
) 
select Client,[1] as ID1,[2] as ID2 
from sourceData as a pivot(max(Amount) for ID in([1],[2]))AS b 



/* 
Client ID1   ID2 
------ ----------- ----------- 
A  100   NULL 
B  NULL  10 
C  80   15 
D  NULL  20 
E  75   10 
F  90   NULL 


*/ 
+0

我想不通,为什么我没赚到+1 –

+0

这伟大的工作,谢谢! –

+0

谢谢...... T-T。 –

2

您可以使用金额情况下做一个条件的总和......构建

Select 
Client 
, ID1 = Sum(case when ID = 1 then Amount ELSE NULL end) 
, ID2 = Sum(case when ID = 2 then Amount ELSE NULL end) 
From MyTable 
Group by Client