您可以使用pivot,但如果您不知道社交网站的名称,并且在添加时可能会有所不同,则需要使用动态sql 执行类似的操作。请注意,它假设每个社交类型的每个合作伙伴有一个不同的地址,以便使用数据透视。
create table #partners (
ID int
,PartnerName nvarchar(100)
,WebAddress nvarchar(100)
,ShortDescription nvarchar(100)
)
create table #social (
ID int
,Name nvarchar(100)
,Value nvarchar(100)
,PartnerID int
,IsActive int
)
insert into #partners
values (1, 'Bob Jones', 'www.bobjones.com', 'bob desc')
,(2, 'Mike Smith', 'wwww.mikesmith.com', 'mike desc')
insert into #social
values (1, 'Facebook', 'www.facebook.com/bobjones', 1,1)
,(2, 'Twitter', 'wwww.twitter.com/bobjonestweets', 1,1)
,(3, 'Linkedin','wwww.linkedin.com/msmith', 2,1)
,(4, 'Facebook', 'www.facebook.com/smitty',2,1)
declare @columns nvarchar(max) = (
select '[' + Name + '],'
from (select distinct Name from #social ) Name
for xml path (''))
declare @SQL nvarchar(max)
set @SQL = 'select *
from (
select p.ID, PartnerName, WebAddress, ShortDescription, Name, Value
from #partners p
join #social s on p.ID = s.PartnerID
where s.IsActive = 1
) s
pivot ( max(Value) for [Name] in (' + left(@columns, len(@columns)-1) +
')) as piv'
exec sp_executesql @SQL