微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL-PIVOT用于一列并添加新列

如何解决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 举报,一经查实,本站将立刻删除。