2017-07-08 53 views
1

枢需要转换以下我想使用PIVOT将行转换为列。我只有数字的例子,但我需要用VARCHAR

Country , code , result 
('IND','AC1','Completed'), 
    ('IND','AC2','Completed'), 
    ('IND','AC3','Completed'), 
    ('SL','AC1','Status'), 
    ('SL','AC2','ERROR'), 
    ('AUS','AC3','Completed') 

Country , ac1 , ac2 , ac3 
------------------------ 
ind , Completed , Completed , Completed 
sl, Status ,Error 
AUS, , ,Completed 
+0

格式化你的问题,它伤害了我的眼睛,我不能读它 – OverCoder

+0

我删除了不兼容的SQL代码。但基本的想法是,你可以使用'MAX()'而不是'SUM()'来代替你为数字工作的任何代码。 –

回答

1

使用条件汇总:

select 
    Country 
    , max(case when code = 'AC1' then result else '' end) as AC1 
    , max(case when code = 'AC2' then result else '' end) as AC2 
    , max(case when code = 'AC3' then result else '' end) as AC3 
from countries 
group by Country 

使用pivot()在SQL服务器:

select 
    Country 
    , coalesce(AC1,'') as AC1 
    , coalesce(AC2,'') as AC2 
    , coalesce(AC3,'') as AC3 
from countries 
pivot (max(result) for code in (AC1,AC2,AC3)) p 

rextester演示:http://rextester.com/ZTLYWY22412

回报(两个):

+---------+-----------+-----------+-----------+ 
| Country | AC1 | AC2 | AC3 | 
+---------+-----------+-----------+-----------+ 
| AUS  |   |   | Completed | 
| IND  | Completed | Completed | Completed | 
| SL  | Status | ERROR  |   | 
+---------+-----------+-----------+-----------+ 
+0

非常感谢你:)对于未格式化的问题抱歉。我下次会照顾它 –

+0

@KarthikCM乐意帮忙! – SqlZim

相关问题