2017-03-09 3 views
1

Ich habe eine Tabelle mit den Partnern Details, wie [ID], [Partnername], [webaddress], [Kurzbeschreibung] usw.Spalten Werte als Zeilenüberschrift

In einer anderen Tabelle i Social gespeicherten Adressen das Schema diese Tabelle wie folgt aussieht: enter image description here

Meine gewünschte Ausgabe

ID ist, Partnername, webaddress, [Kurzbeschreibung] von Partnern Tabelle und [Twitter], [Facebook], [LinkedIn] aus sozialer Tabelle

der Wert s verfügbar in Name Spalten sollte in der Spaltenüberschrift meiner Ausgabetabelle für diesen bestimmten Partner kommen

Können wir dies über SQL-Abfrage erreichen?

+0

wählt Fall, wenn name = ‚twitter‘ dann Wert Ende wie twitter, Fall, wenn name = ‚linkedin‘ dann Wert Ende als linkedin .... – artm

+0

i auch das gleiche zu denken war ... aber für x annehmen Partner gibt es eine neue soziale Adresse sagen Instagram, in diesem Fall muss ich einen neuen Fall schreiben. Ich möchte diesen Fall überspringen. was ich will ist - was auch immer für einen bestimmten Partner in der sozialen Tabelle vorhanden ist, sollte in Überschrift - Wertepaare kommen. – Anurag

+0

Bitte geben Sie das erwartete Ergebnis. –

Antwort

1

Sie schwenken können, aber wenn Sie nicht den Namen des sozialen wissen Websites und es kann variieren, wie sie hinzugefügt werden, müssten Sie etwas tun, indem Sie dynamische SQL verwenden. Beachten Sie, dass für die Verwendung von Pivot eine eindeutige Adresse pro Partner und sozialen Typ angenommen wird.

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

Danke @MPR, ich bekomme das erwartete Ergebnis. – Anurag

Verwandte Themen