sql >> Base de Datos >  >> RDS >> Sqlserver

convertir una fila en columnas

Echa un vistazo a las tablas dinámicas;

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

Una consulta simple para un número finito de StatusTypeNames sería algo como;

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

Tenga en cuenta el uso de MAX. Si existe la posibilidad de que tenga varias filas con la misma combinación de nombre de mes y nombre de tipo de estado, entonces es posible que desee usar SUM.

Para hacer uso de columnas dinámicas como sugiere madhivinan, puede seguir este ejemplo. Desplácese hasta la parte inferior.

Traté de hacer que funcionara con su ejemplo, pero tuve un par de problemas probablemente debido al hecho de que no tenía las tablas. Sin embargo, algo como lo siguiente es lo que está buscando.

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)

No es exactamente correcto, pero es un punto de partida.

Buena suerte.