Sql Pivot输出两个值
这是我的桌子。联系人类型仅为Appriser和AssetTowner 能给我一张这样的桌子吗Sql Pivot输出两个值,sql,tsql,pivot,sql-server-2014,Sql,Tsql,Pivot,Sql Server 2014,这是我的桌子。联系人类型仅为Appriser和AssetTowner 能给我一张这样的桌子吗 create table #Contact( LoanNumber int, ContactType varchar(10), CompanyName varchar(10), CompanyPhone varchar(10), CONSTRAINT PK PRIMARY KEY (LoanNumber,ContactType) ) Insert into #Contact values (
create table #Contact(
LoanNumber int,
ContactType varchar(10),
CompanyName varchar(10),
CompanyPhone varchar(10),
CONSTRAINT PK PRIMARY KEY (LoanNumber,ContactType)
)
Insert into #Contact
values (1,'Appriaser','Yige King','11' ),
(1,'AssetOwner','gqqnbig','22' )
我设法写了这个
LoanNumber AppraiserCompanyName AppraiserCompanyPhone AssertOwnerCompanyName AssertOwnerCompanyPhone
----------------------------------------------------------------------------------------------------
6103339 YigeKing 11 gqqnbig 22
它输出公司名称,但如果我取消注释这两行以获取电话号码,它将抛出语法错误
我怎样才能让它工作?理想情况下,我希望使用pivot,因为我正在学习它。对于所需的pivot
但条件聚合也可以
两人都会回来
如果有助于可视化,则生成带有交叉应用的子查询
一个附带的问题,我怎样才能完全限定LoanNumber?我试着做c.LoanNumber,但它不起作用。我是说在select LoanNumber中,为什么我不能写select c.LoanNumber?@LoveRight你可以选择A.LoanNumber我给了A一个别名,但换成c是件小事。马上好!max方法甚至比pivot更快@LoveRight请记住,pivot期望X和Y值。因此,在pivot方法中,我们需要首先取消pivot数据。这是有代价的。也就是说,Pivot在我的工具箱中仍然有一席之地
select LoanNumber,
CompanyNamePT.Appriaser as AppriaserCompanyName, CompanyNamePT.AssetOwner as AssetOwnerCompanyName
--CompanyPhonePT.Appriaser as AppriaserCompanyPhone, CompanyPhonePT.AssetOwner as AssetOwnerCompanyPhone
from (
select #contact.LoanNumber, #contact.ContactType, #contact.CompanyName
from #contact
) as c
pivot ( max(c.CompanyName) for c.ContactType in (Appriaser,AssetOwner)) as CompanyNamePT
--pivot ( max(c.CompanyPhone) for c.ContactType in ([Appriaser],[AssetOwner])) as CompanyPhonePT
Select *
From (
Select C.LoanNumber
,B.*
From #Contact C
Cross Apply ( values (IIF(ContactType='Appriaser' ,'AppraiserCompanyName' , 'AssetOwnerCompanyName') ,C.CompanyName)
,(IIF(ContactType='Appriaser' , 'AppraiserCompanyPhone', 'AssetOwnerCompanyPhone'),C.CompanyPhone)
) B (Item,Value)
) A
pivot ( max(A.Value) for A.Item in ([AppraiserCompanyName],[AppraiserCompanyPhone],[AssetOwnerCompanyName],[AssetOwnerCompanyPhone]) ) P
Select C.LoanNumber
,AppraiserCompanyName = max(case when ContactType='Appriaser' then C.CompanyName end)
,AppraiserCompanyPhone = max(case when ContactType='Appriaser' then C.CompanyPhone end)
,AssetOwnerCompanyName = max(case when ContactType='AssetOwner' then C.CompanyName end)
,AssetOwnerCompanyPhone = max(case when ContactType='AssetOwner' then C.CompanyPhone end)
From #Contact C
Group By C.LoanNumber