2017-02-16 7 views
1

Ich muss Daten als Ergebnismenge aus einer gespeicherten Prozedur ausgeben, wobei die Spalten meiner Quelldaten als Zeilen in der Ausgabe dargestellt werden. Ich sollte eine Zeile für jede Spalte in meiner Ausgabe sehen, die in meinen Quelldaten ist, und ich sollte eine Spalte in meiner Ausgabe für jede Zeile in meinen Quelldaten sehen. Ich sehe einfach nicht, wie ich das mit Pivot oder den anderen Methoden, die ich mir angeschaut habe, machen kann.Verschieben von SQL-Spalten in Zeilen

Sobald ich die Daten so ausgerichtet habe, wie ich es mag, stelle ich mir vor, ich werde sys.columns abfragen, um die Quelldatenspaltennamen als erste Spalte meiner Ausgabe einzufügen. Ich werde wahrscheinlich auch im Voraus die Quelldatenwerte abfragen müssen, die als Ausgabespaltennamen verwendet werden. Ich stelle mir einige großartige dynamische SQL in meiner Zukunft vor, aber ich kann das alles bei Bedarf selbst erledigen. Mir geht es hauptsächlich darum, wie man Spalten in Zeilen umwandelt. Siehe unten:

SELECT 
    ID 
    ,XID 
    ,Amount 
FROM (
     SELECT 11 as ID, 301 as XID, 50001 as Amount UNION ALL 
     SELECT 12 as ID, 302 as XID, 50002 as Amount UNION ALL 
     SELECT 13 as ID, 303 as XID, 50003 as Amount UNION ALL 
     SELECT 14 as ID, 304 as XID, 50004 as Amount 
    ) T1 
/* 
The above query returns this: 

ID XID Amount 
---------------- 
11 301 50001 
12 302 50002 
13 303 50003 
14 304 50004 


Instead I would like to see this: 

Column 11  12  13  14 
----------------------------------- 
ID  11  12  13  14 
XID  301 302 303 304 
Amount 50001 50002 50003 50004 

*/ 
+3

Check out PIVOT Benötigen Sie: https://technet.microsoft.com/en- us/bibliothek/ms177410 (v = sql.105) .aspx – Leonidas199x

+0

Dies ist das Gegenteil von dem, was Sie wollen, aber es ist shou ld lenken Sie in die richtige Richtung http://stackoverflow.com/questions/15931607/convert-rows-to-columns-using-pivot-in-sql-server –

+0

Mit PIVOT können Sie den Quellwert für die Spalte ID zu verursachen stellen Sie für jede ID in der Ausgabe eine Spalte dar, aber Sie können nicht bewirken, dass der Rest der Quellspalten als Zeilen dargestellt wird. Ich kann nicht sehen, wie ich mit PIVOT machen soll, was ich will. – RedRocketFire

Antwort

1

Angenommen, Sie brauchen Dynamic.

Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName(ID) From Yourtable Order by 1 For XML Path('')),1,1,'') 
Select @SQL = ' 
Select [Column],' + @SQL + ' 
From (
     Select B.* 
     From YourTable A 
     Cross Apply (
         Values (1,''ID'' ,ID,ID) 
          ,(2,''XID'' ,ID,XID) 
          ,(3,''Amount'',ID,Amount) 
        ) B ([Seq],[Column],[Item],[Value]) 
    ) A 
Pivot (sum(Value) For [Item] in (' + @SQL + ')) p 
Order By [Seq] 
' 
Exec(@SQL); 

Returns

enter image description here

Wenn Sie nicht Dynamische

Select [Column],[11],[12],[13],[14] 
From (
     Select B.* 
     From YourTable A 
     Cross Apply (
         Values (1,'ID' ,ID,ID) 
          ,(2,'XID' ,ID,XID) 
          ,(3,'Amount',ID,Amount) 
        ) B ([Seq],[Column],[Item],[Value]) 
    ) A 
Pivot (sum(Value) For [Item] in ([11],[12],[13],[14])) p 
Order By [Seq] 
+0

Dies ist eine fabelhafte Lösung. Vielen Dank!!! – RedRocketFire

+0

@RedRocketFire Glücklich es half. Mehr von einer Transpose als Pivot :) –

Verwandte Themen