Ако приемем, че използвате SQL Server 2005 или по-нова версия, ето кодът:
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 )
Това ще работи независимо колко различни статуса имате. Той динамично събира заявка с PIVOT
.
Актуализация
Както @JonH посочи, имаше уязвимост в кода, който публикувах, което направи възможна атака чрез инжектиране. Това вече е коригирано с помощта на QUOTENAME при формирането на имената на колоните.
Други примери: