2011-05-16 132 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/