En supposant que vous utilisez SQL Server 2005 ou supérieur, voici le 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 )
Cela fonctionnera quel que soit le nombre de statuts différents que vous avez. Il assemble dynamiquement une requête avec PIVOT
.
Mettre à jour
Comme @JonH l'a souligné, il y avait une vulnérabilité dans le code que j'ai posté, ce qui a rendu possible une attaque par injection. Ceci est maintenant corrigé, en utilisant QUOTENAME lors de la formation des noms de colonnes.
Autres exemples :