2016-10-17 6 views
0

Ich habe eine Tabelle mit einer Spalte für die Fall-ID, Aktion und Grund. Eine einzelne Fall-ID kann mehrere Zeilen mit verschiedenen Aktionen und Codes enthalten. Ich kann pivotieren und mehrere Zeilen mit den Spalten action1, action2, action3 usw. erhalten, aber für das Leben von mir kann case id, action1, reason1, action2, reason2 usw. in einer einzigen Zeile nicht erhalten werden.SQL Server mehrere Zeilen und zwei Spalten in einzelne Zeile mit mehreren Spalten

+0

Mögliche doppelte: https://stackoverflow.com/questions/2170058/can- sql-server-pivot-without-knowing-die resultierenden Spaltennamen – openshac

Antwort

0

Wenn Sie ein wenig mehr Dynamik gehen (n Gründe)

Drop Table #Temp 
Declare @YourTable table (ID int,Action varchar(50),Reason varchar(50)) 
Insert Into @YourTable values 
(1,'Load Data','Boss said to'), 
(1,'Run Query','It is what I do'), 
(2,'Take Garbage Out','Wife makes me') 


-- Convert Data to EAV Structure'ish 
Declare @XML xml = (Select *,GrpSeq = Row_Number() over (Partition By ID Order By (Select NULL)) from @YourTable for XML RAW) 
Select ID  = r.value('@ID','int') 
     ,ColSeq = Row_Number() over (Partition By r.value('@ID','int') Order By (Select NULL)) 
     ,Element = attr.value('local-name(.)','varchar(100)')+r.value('@GrpSeq','varchar(10)') 
     ,Value  = attr.value('.','varchar(max)') 
Into #Temp 
From @XML.nodes('/row') as A(r) 
Cross Apply A.r.nodes('./@*') AS B(attr) 
Where attr.value('local-name(.)','varchar(100)') not in ('ID','GrpSeq') 

-- Get Cols in correct Order 
Declare @Cols varchar(max) 
Set @Cols = Stuff((Select ',' + QuoteName(Element) 
        From (Select Distinct Top 100 Percent ColSeq,Element From #Temp Order By ColSeq) A 
        For XML Path(''), Type 
        ).value('.', 'varchar(max)'),1,1,'') 

-- Execute Dynamic Pivot 
Declare @SQL varchar(max) = ' 
Select * 
From (Select ID,Element,Value From #Temp) T 
Pivot (
     max(Value) 
     For [Element] in (' + @Cols + ') 
     ) P ' 

Exec(@SQL) 

Returns

enter image description here

Verwandte Themen