透视列以填充另一列中的值
Posted
技术标签:
【中文标题】透视列以填充另一列中的值【英文标题】:Pivot column to populate with values from another column 【发布时间】:2017-05-04 14:38:03 【问题描述】:我有一个 SQL Server 数据库表,我需要在其中转换(透视?)Vaccination Name
列的值,每个值都转换为它们自己的列。然后我需要用来自Vaccination Date
的值填充这些列。我不是一个程序员,我的研究还没有找到适合我需要的东西。
表格示例
【问题讨论】:
每个疫苗接种有多个日期,您想显示哪个? @ollie。我应该提供更多细节。我需要在单独的列中获取疫苗接种名称的原因是表中的每只宠物只需要一行。他们目前有多个。示例屏幕截图在这里 - imgur.com/a/eaEq5。谢谢! 你想要每个宠物/疫苗组合的最大日期吗?如果一只宠物有多个狂犬病疫苗条目,你想要哪一个? @ollie - 最近的日期,如果有多个。谢谢。 【参考方案1】:有几种方法可以获得每只宠物每次疫苗接种的最长日期。最简单的可能是使用某种带有聚合函数的条件逻辑:
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 供你玩。
【讨论】:
太棒了!谢谢!以上是关于透视列以填充另一列中的值的主要内容,如果未能解决你的问题,请参考以下文章