2011-05-16 136 views
1

我想在兩個表上做一個數據透視表。SQL數據透視表或類似數據透視表的東西

表1

PersonToPhone

PersonID int not null 
phoneID int not null 

表2

電話

phoneID int not null 
PhoneNumber nvarchar(10) 
PhoneType int 

我想的結果是

---------|-------------|-------------|-------------| 
personID | phoneNumber | phoneNumber | phoneNumber |........ n times 

有沒有辦法使用數據透視表或一些很酷的SQL,將列出一個personID和他們所有的phonenumbers在1行?

+0

都是已知的時間提前了電話號碼。如果是這種情況,您可以使用[PIVOT](http://msdn.microsoft.com/en-us/library/ms177410.aspx)關鍵字。 – 2011-05-16 14:00:10

+0

phoneIDs到personIDs的數量將是3 – gh9 2011-05-16 14:07:45

+0

我正在談論知道所有的電話號碼。例如,您是否知道10個人的全部30個電話號碼,以便您可以將電話號碼指定爲輸出列? – 2011-05-16 14:21:10

回答

1
select personID,[Foo],[Bar],[fooBar] 
FROM (
     SELECT pp.PersonID,phonetype,phoneNumber 
     FROM personToPhone AS PP 
     inner join phone as p on pp.phoneid = p.phoneid 
     where pp.personid = @PersonID) as tableToPivot 
pivot (max(phoneNumber) for phoneType IN ([[Foo],[Bar],[fooBar])) as pivotTable 

猛拉大部分理論關在這裏 http://sqlwithmanoj.wordpress.com/2011/01/25/dynamic-pivot/