Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

eine Zeile in Spalten umwandeln

Sehen Sie sich Pivot-Tabellen an;

Siehe http://msdn.microsoft.com/en-us/library/ ms177410.aspx

Eine einfache Abfrage für eine endliche Anzahl von StatusTypeNames wäre so etwas wie;

SELECT * FROM 
(SELECT MonthName, StatusTypeName as attributeCol, StatusCount FROM @ResultsTable) rt 
PIVOT ( MAX(StatusCount) FOR attributeCol in ([ToBeScheduled],[Complete])) as pvt
ORDER BY MonthName

Beachten Sie die Verwendung von MAX. Wenn die Möglichkeit besteht, dass Sie mehrere Zeilen mit derselben Kombination aus Monatsname und Statustypnamen haben, sollten Sie SUM verwenden.

Um dynamische Spalten zu verwenden, wie madhivinan vorschlägt, können Sie dieses Beispiel. Scrollen Sie nach unten.

Ich habe versucht, es mit Ihrem Beispiel zum Laufen zu bringen, aber weil ich ein paar Probleme hatte, lag es wahrscheinlich daran, dass ich die Tabellen nicht hatte. Sie suchen jedoch nach etwas wie dem Folgenden.

DECLARE @listCol VARCHAR(2000)
DECLARE @query VARCHAR(4000)
SELECT  @listCol = SELECT STUFF (( SELECT DISTINCT '],[' + 
                    StatusTypeName FROM @ResultsTable ORDER BY '],[' + 
                    StatusTypeName FOR XML PATH ('')), 1, 2, '') + ']'


SET @query =
'SELECT * FROM
      (SELECT MonthNameCol, StatusTypeName as attributeCol, StatusCount FROM @ResultsTable) rt
PIVOT ( MAX(StatusCount) FOR attributeCol in ('[email protected]+')) AS pvt ORDER BY MonthNameCol'

EXECUTE (@query)

Es ist nicht ganz richtig, aber es ist ein Ausgangspunkt.

Viel Glück.