2016-07-14 6 views
0

Ich weiß, es gibt bessere Möglichkeiten, um die Tabelle zu entwerfen, aber das ist nur ein Beispiel dafür, was ich braucheselbstbeziehende dynamische SQL-Pivot-Abfrage Rückkehr unerwünschte Ergebnisse

Ich kann einfach nicht scheinen, um die Ergebnisse zu bekommen, ich bin auf der Suche für

Tabelle und Daten:

enter image description here

Abfrage:

DECLARE @cols AS NVARCHAR(MAX), 
@query AS NVARCHAR(MAX); 

SET @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(columnType) 
      FROM [Values] 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

SET @query = 'SELECT ' + @cols + ' FROM 
     (
      SELECT value, columnType 
      FROM [Values] 
     ) x 
     PIVOT 
     (
      MAX(value) 
      FOR columnType IN (' + @cols + ') 
     ) p ' 

EXECUTE(@query) 
Ich

Ergebnis erhalten:

enter image description here

Ergebnisse Ich möchte

Product Item SubItem 

    A  A A  A A A 
    A  A B  A A B 
    B  B A  NULL 

Antwort

0

Ihre Anfrage kann einfach sein kann mit join s für zwei Ebenen gelöst:

select v.value as Product, vi.value as Item, vsi.value as Subitem 
from [Values] v left join 
    [Values] vi 
    on vi.column_type = 'Item' and vi.parent_id = v.id left join 
    [Values] vsi 
    on vsi.column_type = 'Sub Item' and vsi.parent_id = v.id 
where v.column_type = 'Product'; 

Wenn Sie eine unbekannte haben Anzahl der Ebenen, dann können Sie diese Abfrage mit dynamischem SQL erweitern.

+0

Es war nicht genau die Antwort, die ich suchte, aber es wird funktionieren. Coding der dynamischen SQL ist ein bisschen chaotischer – Anarchy101

Verwandte Themen