如何解决SQL-PIVOT用于一列并添加新列
我对sql相当陌生。我的输入表为
TypeId EventDescription FeedHeader FeedHeaderValue
---------------------------------------------------------
166 Financial Allocrule 130
166 Financial DealID 0
175 Partner Capital InvestorID OV_P1
175 Investment Querter Q1
175 Investment DealID offset
175 Investment InvestorID OV_P2
我需要如下输出
Financial value Partner Capital value Investment value
-------------------------------------------------------------------------------
Allocrule 130 InvestorID OV_P1 Querter Q1
DealID 0 DealID offset
InvestorID OV_P2
不确定是否可能。我尝试使用数据透视,但未提供期望的输出
select
[Financial] as FinancialHeader,[Partner Capital] as PartnerCapitalHeader,[Investment] as Investmentheader
from
(
select EventDescription,FeedHeader
from [Feeder]
) x
pivot
(
MAX(FeedHeader)
for EventDescription in([Financial],[Partner Capital],[Investment])
)p
我尝试过的另一种方法
Select
Min(Case [EventDescription] When 'Financial' Then [FeedHeader] End)
Financial,Min(Case [EventDescription] When 'Financial' Then [FeedHeaderValue] End)
value,Min(Case [EventDescription] When 'Partner Capital' Then [FeedHeader]
End) PartnerCapital,Min(Case [EventDescription] When 'Partner Capital' Then
[FeedHeaderValue] End) value,Min(Case [EventDescription] When 'Investment' Then [FeedHeader] End)
Investment,Min(Case [EventDescription] When 'Investment' Then [FeedHeaderValue] End)
value
From [Feeder]
Group By EventDescription
还有另一种方法吗?
解决方法
我很好奇,并用PIVOT
在SO和Google上进行了一些研究,最后我的运气得到了点击(至少我现在想的是这样)
此处的关键点是,您可以根据要添加的EventDescription
列数,在末尾附加1或2来创建新的PIVOT
值。
如果不执行此操作,根据我对这项任务的经验,数据透视查询将无法正常工作,并会导致错误。
select max([Financial]) as FinancialHeader,max([Financial1]) as FinancialHeaderValue,max([Partner Capital]) as PartnerCapitalHeader,max([Partner Capital1]) as PartnerCapitalHeaderValue,max([Investment]) as InvestmentHeader,max([Investment1]) as InvestmentHeaderValue
from
(select EventDescription,EventDescription+'1' as EventDescription1,FeedHeader,FeedHeaderValue,row_number() over (partition by EventDescription order by EventDescription) rn
from [testtable]
) x
pivot
(
MAX(FeedHeader)
for EventDescription in([Financial],[Partner Capital],[Investment])
) p
pivot
(
MAX(FeedHeaderValue)
for EventDescription1 in([Financial1],[Partner Capital1],[Investment1] )
) v
group by [RN]
演示:db<>fiddle
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。