sql >> データベース >  >> RDS >> Sqlserver

SQL Serverで単一のテーブルに結合して要約を作成するにはどうすればよいですか?

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

    その他の例:



    1. SQLテーブルからIDのリストをコンマ区切りの値の文字列として取得するにはどうすればよいですか?

    2. MySQLに推奨されるホットバックアップシステム?

    3. 値をループし、動的クエリを作成し、結果セットに追加します

    4. Pythonツイストとデータベース接続