2017-05-04 45 views
1

我有一个SQL Server数据库表,其中需要将Vaccination Name列的值转换(pivot?)到各自的列中。然后我需要使用Vaccination Date的值填充这些列。我不是一个程序员,我的研究没有找到符合我需要的东西。枢轴列填充来自另一列的值

表例如

enter image description here

+2

每个疫苗接种有多个日期,您想要显示哪个日期? – ollie

+0

@ollie。我应该提供更多细节。我需要将疫苗名称分列的原因是表中的每只宠物只需要一行。他们目前有多个。一个示例截图在这里 - http://imgur.com/a/eaEq5。谢谢! – user7963586

+0

你想要每个宠物/疫苗组合的最大日期吗?如果一只宠物有多个狂犬病疫苗入境,你想要哪一个? – ollie

回答

0

有几种方法可以得到每个接种每个宠物的最大日期。最简单的可能是使用某种条件逻辑与集合功能:

select 
    Pet_Name, 
    Bordetella = max(case when Vaccination_Name = 'Bordetella' then Vaccination_Date end), 
    CanineDistemper = max(case when Vaccination_Name = 'Canine Distemper' then Vaccination_Date end), 
    Rabies = max(case when Vaccination_Name = 'Rabies' then Vaccination_Date end) 
from <table> 
group by Pet_Name; 

或者因为你使用SQL Server,你可以使用旋转功能:

select Pet_name, 
    Bordetella, [Canine Distemper], Rabies 
from 
(
    select 
    Pet_Name, 
    Vaccination_Name, 
    Vaccination_Date 
    from <table> 
) d 
pivot 
(
    max(Vaccination_Date) 
    for Vaccination_Name in (Bordetella, [Canine Distemper], Rabies) 
) piv; 

双方将返回相同的结果给你。我甚至创建了一个demo供你玩。

+0

太棒了!谢谢! – user7963586