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

ピボットテーブルと連結列

    SQL Server 2005は、非常に便利なPIVOTおよびUNPIVOT演算子を提供します。これにより、PIVOTと一部のコード生成/動的SQLを使用して、このコードをメンテナンスフリーにすることができます

    /*
    CREATE TABLE [dbo].[stackoverflow_159456](
        [ID] [int] NOT NULL,
        [TYPE] [char](1) NOT NULL,
        [SUBTYPE] [char](1) NOT NULL,
        [COUNT] [int] NOT NULL,
        [MONTH] [datetime] NOT NULL
    ) ON [PRIMARY]
    */
    
    DECLARE @sql AS varchar(max)
    DECLARE @pivot_list AS varchar(max) -- Leave NULL for COALESCE technique
    DECLARE @select_list AS varchar(max) -- Leave NULL for COALESCE technique
    
    SELECT @pivot_list = COALESCE(@pivot_list + ', ', '') + '[' + PIVOT_CODE + ']'
            ,@select_list = COALESCE(@select_list + ', ', '') + 'ISNULL([' + PIVOT_CODE + '], 0) AS [' + PIVOT_CODE + ']'
    FROM (
        SELECT DISTINCT [TYPE] + '_' + SUBTYPE AS PIVOT_CODE
        FROM stackoverflow_159456
    ) AS PIVOT_CODES
    
    SET @sql = '
    ;WITH p AS (
        SELECT ID, [MONTH], [TYPE] + ''_'' + SUBTYPE AS PIVOT_CODE, SUM([COUNT]) AS [COUNT]
        FROM stackoverflow_159456
        GROUP BY ID, [MONTH], [TYPE] + ''_'' + SUBTYPE
    )
    SELECT ID, [MONTH], ' + @select_list + '
    FROM p
    PIVOT (
        SUM([COUNT])
        FOR PIVOT_CODE IN (
            ' + @pivot_list + '
        )
    ) AS pvt
    '
    
    EXEC (@sql)
    


    1. SQLとアプリケーションで計算を実行することの長所と短所は何ですか

    2. psycopg2のパラメーターとしてテーブル名を渡す

    3. PL / SQL ORA-01422:正確なフェッチが要求された数を超える行を返します

    4. SQLiteデータベースのリークが見つかりました