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

SQL2005のPIVOT

    ROW_NUMBER()を使用する 、PIVOT およびいくつかの動的SQL(ただしカーソルは必要ありません):

    CREATE TABLE [dbo].[stackoverflow_198716](
        [code] [varchar](1) NOT NULL,
        [number] [int] 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 + ', ', '') + '[' + CONVERT(varchar, PIVOT_CODE) + ']'
            ,@select_list = COALESCE(@select_list + ', ', '') + '[' + CONVERT(varchar, PIVOT_CODE) + '] AS [col_' + CONVERT(varchar, PIVOT_CODE) + ']'
    FROM (
        SELECT DISTINCT PIVOT_CODE
        FROM (
            SELECT code, number, ROW_NUMBER() OVER (PARTITION BY code ORDER BY number) AS PIVOT_CODE
            FROM stackoverflow_198716
        ) AS rows
    ) AS PIVOT_CODES
    
    SET @sql = '
    ;WITH p AS (
        SELECT code, number, ROW_NUMBER() OVER (PARTITION BY code ORDER BY number) AS PIVOT_CODE
        FROM stackoverflow_198716
    )
    SELECT code, ' + @select_list + '
    FROM p
    PIVOT (
        MIN(number)
        FOR PIVOT_CODE IN (
            ' + @pivot_list + '
        )
    ) AS pvt
    '
    
    PRINT @sql
    
    EXEC (@sql)
    


    1. MicrosoftAccessのデザインビューでテーブルを開く方法

    2. NHibernateでNUMBEROracleデータ型をマッピングするのに最適な.NETデータ型はどれですか?

    3. MariaDBで時間、分、秒を時間値から分離する4つの方法

    4. SQLite Order By Date1530019888000