Ervan uitgaande dat u SQL Server 2005 of hoger gebruikt, is hier de code:
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 )
Dit werkt ongeacht hoeveel verschillende statussen je hebt. Het stelt dynamisch een query samen met PIVOT
.
Bijwerken
Zoals @JonH opmerkte, zat er een kwetsbaarheid in de code die ik plaatste, waardoor een injectie-aanval mogelijk werd. Dit is nu opgelost door QUOTENAME te gebruiken bij het vormen van de kolomnamen.
Andere voorbeelden: