Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

converter uma linha em colunas


Confira as tabelas dinâmicas;

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

Uma consulta simples para um número finito de StatusTypeNames seria 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

Observe o uso de MAX. Se houver a chance de você ter várias linhas com a mesma combinação de nome de mês e nome de tipo de status, convém usar SUM.

Para fazer uso de colunas dinâmicas como sugere madhivinan, você pode seguir este exemplo. Role para baixo.

Tentei fazê-lo funcionar com o seu exemplo, mas porque tive alguns problemas provavelmente devido ao fato de não ter as tabelas. No entanto, algo como o seguinte é o que você está procurando.
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)

Não é exatamente certo, mas é um ponto de partida.

Boa sorte.