我有一张包含合作伙伴详情的表格,如[ID],[PartnerName],[webaddress],[简短描述]等。
我想要的输出是
ID,PartnerName,webaddress,[简短说明]来自合作伙伴表和[Twitter],[Facebook],[LinkedIn]来自社交表
“名称”列中可用的值应位于我的输出表的列标题中,用于该特定合作伙伴
我们可以通过SQL查询来实现吗?
答案 0 :(得分:2)
请根据需要使用PIVOT
功能。
您可以在此问题上看到答案:Convert Rows to columns using 'Pivot' in SQL Server
您还可以阅读有关如何转动表格的MSDN文档:https://msdn.microsoft.com/en-us/library/ms177410.aspx
答案 1 :(得分:1)
您可以使用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