2017-03-09 84 views
1

我有一個表與合作伙伴詳細信息,如[ID],[PartnerName],[webaddress],[簡短描述]等列值作爲行標題

在我已存儲的社會另一表地址的模式此表看起來像: enter image description here

我的期望的輸出是

ID,PartnerName,webaddress,從夥伴​​表[簡短描述]和[微博],[Facebook的],[LinkedIn]從社會表

的值s在名稱列中應該出現在我的輸出表的列標題中,該特定夥伴

我們可以通過sql查詢來實現嗎?

+0

選擇情況下,當名=「嘰嘰喳喳」,那麼價值的最終如Twitter,情況下,當名=「LinkedIn」,則值作爲最終.... LinkedIn我 – artm

+0

也在想同樣的...但假設爲X合夥人有一個新的社交地址說instagram,在這種情況下,我需要寫一個新的案例。我想跳過這些情況。我想要的是 - 無論是在社交表中的特定合作伙伴,都應該出現在標題 - 值對中。 – Anurag

+0

請給出預期的結果。 –

回答

1

您可以使用支點,但如果你不知道社會的名它們可能會隨着它們的添加而變化,所以你需要使用動態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 
+0

謝謝@MPR,我收到了預期的結果。 – Anurag