2016-04-25 69 views
1

我有以下数据:修改建议枢查询的SQL服务器,以获得所需的输出

------------------------------------------------ 
DestinationSite  SourceSite Dist  Rank 
------------------------------------------------ 
CZ_0     PFC  2717.64  1 
CZ_0     WFC  3218.22  2 
CZ_0     OFC  3971.14  3 
CZ_0     FFC  4226.69  4 
CZ_10001    FFC  64.13  1 
CZ_10001    OFC  564.11  2 
CZ_10001    WFC  2511.03  3 
CZ_10001    PFC  2867.75  4 

我想将其更改为以下格式:

------------------------------------------------ 
DestinationSite Pref1 Pref2 Pref3 Pref4 
------------------------------------------------ 
CZ_0    PFC  WFC  OFC  FFC 
CZ_10001   FFC  OFC  WFC  PFC 

我写的查询作为如下:

select DestinationSite, [1] as Pref1, [2] as Pref2, [3] as Pref3, [4] as Pref4 
from Table1 a 
pivot (max(SourceSite) for Rank in ([1],[2],[3],[4])) as b 
order by DestinationSite; 

但它给我的输出如下,不同的比我需要:

------------------------------------------------- 
DestinationSite  Pref1 Pref2 Pref3 Pref4 
------------------------------------------------- 
CZ_0    PFC  NULL NULL NULL 
CZ_0    NULL WFC  NULL NULL 
CZ_0    NULL NULL OFC  NULL 
CZ_0    NULL NULL NULL FFC 
CZ_10001   FFC  NULL NULL NULL 
CZ_10001   NULL OFC  NULL NULL 
CZ_10001   NULL NULL WFC  NULL 
CZ_10001   NULL NULL NULL PFC 

需要关于如何修改我的查询以获得所需输出的建议。谢谢。

回答

1

试试这个:

创建表

create table Destination 
(
DestinationSite varchar(10), 
SourceSite varchar(3), 
dist decimal(18,2), 
[rank] tinyint 
) 

插入数据

insert into Destination values 

('CZ_0', 'PFC', 2717.64, 1), 
('CZ_0', 'WFC', 3218.22, 2), 
('CZ_0', 'OFC', 3971.14, 3), 
('CZ_0', 'FFC', 4226.69, 4), 
('CZ_10001','FFC', 64.13,  1), 
('CZ_10001','OFC', 564.11, 2), 
('CZ_10001','WFC', 2511.03, 3), 
('CZ_10001','PFC', 2867.75, 4) 

枢轴

; with cte 
as 
(
    select 
     DestinationSite, 
     SourceSite, 
     [rank] as r 
    from Destination 

) 

SELECT DestinationSite,[1] as Pref1 ,[2] as Pref2,[3] as Pref3 ,[4] as Pref4 FROM cte 
PIVOT(max(SourceSite) FOR r IN ([1],[2],[3],[4]) ) AS P 

结果

------------------------------------------------ 
DestinationSite Pref1 Pref2 Pref3 Pref4 
------------------------------------------------ 
CZ_0    PFC  WFC  OFC  FFC 
CZ_10001   FFC  OFC  WFC  PFC 
+0

是的,后来我意识到我的数据中额外的“Dist”列正在产生问题。只要我从枢轴操作中删除它,我就得到了所需的输出。谢谢! – Crypticlight