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

Como faço para criar um resumo juntando-se a uma única tabela com o SQL Server?


Supondo que você esteja usando o SQL Server 2005 ou superior, aqui está o código:
DECLARE @cols VARCHAR(1000)
DECLARE @sqlquery VARCHAR(2000)

SELECT  @cols = STUFF(( SELECT distinct  ',' + QuoteName(cast([status] as varchar))
                        FROM LogTable FOR XML PATH('') ), 1, 1, '') 


SET @sqlquery = 'SELECT * FROM
      (SELECT UserIndex,  [status]
       FROM LogTable ) base
       PIVOT (Count(status) FOR [status]
       IN (' + @cols + ')) AS finalpivot'

EXECUTE ( @sqlquery )

Isso funcionará, não importa quantos status diferentes você tenha. Ele monta dinamicamente uma consulta com PIVOT .

Atualizar

Como @JonH apontou, havia uma vulnerabilidade no código que postei, o que possibilitou um ataque de injeção. Isso agora foi corrigido usando QUOTENAME ao formar os nomes das colunas.

Outros exemplos: