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 を使用することで修正されました。 列名を作成するとき。
その他の例: