Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

convertire una riga in colonne

Dai un'occhiata alle tabelle pivot;

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

Una semplice query per un numero finito di StatusTypeNames sarebbe qualcosa del tipo;

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

Notare l'uso di MAX. Se è possibile che tu abbia più righe con la stessa combinazione nomemese e nometipo di stato, potresti voler utilizzare SUM.

Per utilizzare le colonne dinamiche come suggerisce madhivinan, puoi seguire questo esempio. Scorrere fino alla fine.

Ho provato a farlo funzionare con il tuo esempio, ma poiché ho avuto un paio di problemi probabilmente dovuti al fatto che non avevo le tabelle. Tuttavia, qualcosa come il seguente è ciò che stai cercando.

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)

Non è proprio giusto, ma è un punto di partenza.

Buona fortuna.