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

日付を列として動的にピボットする方法

    これがサンプルテーブルです

    SELECT * INTO #Names
    FROM
    (
    SELECT 1 ID,'ITEM1' NAME 
    UNION ALL
    SELECT 2 ID,'ITEM2' NAME 
    )TAB
    
    SELECT * INTO #Stockdates
    FROM
    (      
    SELECT 1 ID,1 NAMEID,8 STOCK,'2-1-2014 ' [DATE]
    UNION ALL
    SELECT 2 ID,2 NAMEID,2 STOCK,'4-1-2014 ' [DATE]
    )TAB
    

    結合データを一時テーブルに配置します

    SELECT N.NAME,S.[DATE],S.STOCK 
    INTO #TABLE
    FROM #NAMES N
    JOIN #Stockdates S ON N.ID=S.NAMEID
    

    ピボットの列を取得する

    DECLARE @cols NVARCHAR (MAX)
    
    SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR, [DATE], 106) + ']', 
                   '[' + CONVERT(NVARCHAR, [DATE], 106) + ']')
                   FROM    (SELECT DISTINCT [DATE] FROM #TABLE) PV  
                   ORDER BY [DATE]
    

    今それをピボットします

    DECLARE @query NVARCHAR(MAX)
    SET @query = '           
                  SELECT * FROM 
                 (
                     SELECT * FROM #TABLE
                 ) x
                 PIVOT 
                 (
                     SUM(STOCK)
                     FOR [DATE] IN (' + @cols + ')
                ) p      
    
                '     
    EXEC SP_EXECUTESQL @query
    

    そしてあなたの結果はここにあります



    1. SQL Server 2008では3文字になるように、先行ゼロで文字列を埋めます

    2. MSSQLからMySQLに移行する方法

    3. MySQL Errno 150

    4. android.database.sqlite.SQLiteCantOpenDatabaseException:不明なエラー(コード14):データベースを開くことができませんでした