透视列以填充来自另一列的值

时间:2017-05-04 14:38:03

标签: sql sql-server pivot

我有一个SQL Server数据库表,我需要在其中转换(pivot?)Vaccination Name列的值,每个列都放在它们自己的列中。然后我需要使用Vaccination Date中的值填充这些列。我不是一个程序员,我的研究没有找到符合我需求的东西。

表格示例

enter image description here

1 个答案:

答案 0 :(得分: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,因此可以使用PIVOT函数:

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供你玩。