Sql Pivot输出两个值

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 (

这是我的桌子。联系人类型仅为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 (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