2017-04-17 73 views
0

我有以下表中的数据:基本透视表

select person_name, appointment_id, unique_encounter, enounter_code 
from appointment 

person_name appointment_id unique_encounter enounter_code 
----------- -------------- ---------------- ------------- 
Mike  123    A1     CG 
Mike  123    A1     DT 
John  458    1F     CG 
Bill  555    AB     AJ 
Joe   197    ZZ     CG 
Joe   197    ZZ     AJ 
Joe   197    ZZ     DT 

我想编写一个查询,以达到以下效果:

person_name appointment_id unique_encounter enounter_code_1 enounter_code_2 enounter_code_3  
----------- -------------- ---------------- ------------- --------------- --------------- 
Mike  123    A1     New        Deleted 
John  458    1F     New 
Bill  555    AB         Updated 
Joe   197    ZZ     New    Updated   Deleted 

我查询不工作:可以将某些可能的帮助。谢谢

select person_name, appointment_id, unique_encounter 
    ,Case when enounter_code = 'CG' then 'New' else '' End as enounter_code_1 
    ,Case when enounter_code = 'AJ' then 'Updated' else '' End as enounter_code_2 
    ,Case when enounter_code = 'DT' then 'Deleted' else '' End as enounter_code_3 

from appointment 
group by person_name, appointment_id, unique_encounter 
+0

我能弄明白。 – user3376315

+0

http://stackoverflow.com/questions/5652334/how-to-convert-row-to-column-in-sql/5653301#5653301 – SQLMason

回答

0

您是否有权转动数据。

尝试一下它的不同视角。

create table #temp1 
(
person_name nvarchar(50) 
,appointment_id nvarchar(50) 
,unique_encounter nvarchar(50) 
,enounter_code nvarchar(50) 
) 

insert into #temp1 
(person_name, appointment_id, unique_encounter, enounter_code) 
Values 
('Mike',123,'A1','CG') 
,('Mike',123,'A1','DT') 
,('John',458,'1F','CG') 
,('Bill',555,'AB','AJ') 
,('Joe',197,'ZZ','CG') 
,('Joe',197,'ZZ','AJ') 
,('Joe',197,'ZZ','DT') 



select * 
from 
(
    select person_name, appointment_id, unique_encounter, enounter_code 
    from #temp1 
) s 
pivot 
(
Max(person_name) 
    for enounter_code in ([CG], [AJ], [DT]) 
) pvt; 

试试看: http://data.stackexchange.com/meta.stackoverflow/query/edit/659696