Angenommen, Sie verwenden SQL Server 2005 oder höher, hier ist der 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 )
Dies funktioniert unabhängig davon, wie viele verschiedene Status Sie haben. Es stellt dynamisch eine Abfrage mit PIVOT
zusammen .
Aktualisieren
Wie @JonH betonte, gab es in dem von mir geposteten Code eine Schwachstelle, die einen Injection-Angriff ermöglichte. Dies wird jetzt behoben, indem QUOTENAME verwendet wird bei der Bildung der Spaltennamen.
Weitere Beispiele: