2017-05-19 107 views
0
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') 

這是我的表格。 ContactTypes只是Appriaser和AssetOwner。樞軸輸出兩個值

enter image description here

我能得到這樣

LoanNumber AppraiserCompanyName AppraiserCompanyPhone AssertOwnerCompanyName AssertOwnerCompanyPhone 
---------------------------------------------------------------------------------------------------- 
6103339  YigeKing    11      gqqnbig     22 

表我設法寫這

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 

它輸出的公司名稱,但如果我取消註釋兩行拿到電話號碼它會拋出語法錯誤。

我該如何讓它工作?理想情況下,我想使用樞軸,因爲我學習了它。

回答

1

對於所需的PIVOT

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 

雙方將返回

enter image description here

如果與可視化幫助,子查詢與交叉應用生成

enter image description here

+0

側的問題,我怎麼能完全限定LoanNumber?我試着做'c.LoanNumber',但它不起作用。 – Gqqnbig

+0

我的意思是在'select LoanNumber'中,爲什麼我不能寫'select c.LoanNumber'? – Gqqnbig

+0

@LoveRight您可以選擇A.LoanNumber我分配了A的別名,但將其更改爲C是一個小問題。一會兒 –