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

¿Cómo construyo un resumen uniéndome a una sola tabla con SQL Server?

Suponiendo que está utilizando SQL Server 2005 o superior, aquí está el 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 )

Esto funcionará sin importar cuántos estados diferentes tengas. Ensambla dinámicamente una consulta con PIVOT .

Actualizar

Como señaló @JonH, había una vulnerabilidad en el código que publiqué, lo que hizo posible un ataque de inyección. Esto ahora está solucionado usando QUOTENAME al formar los nombres de las columnas.

Otros ejemplos: