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

SQLピボットテーブルダイナミック

    ここでは、ピボットの列として表示する列の値を選択します

    DECLARE @cols NVARCHAR (MAX)
    
    SELECT @cols = COALESCE (@cols + ',[' + AvJT + ']', '[' + AvJT + ']')
                   FROM    (SELECT DISTINCT AvJT FROM YourTable) PV  
                   ORDER BY AvJT
    

    次に、クエリをピボットします

    DECLARE @query NVARCHAR(MAX)
    SET @query = 'SELECT * FROM 
                 (
                     SELECT date_1, StartHour,AvJT, data_source 
                     FROM YourTable
                 ) x
                 PIVOT 
                 (
                     -- Values in each dynamic column
                     SUM(data_source)
                     FOR AvJT IN (' + @cols + ')                      
                ) p;' 
    
    EXEC SP_EXECUTESQL @query
    

    列名が動的でない場所でそれを実行したい場合は、以下のクエリを実行できます

    SELECT DATE_1,STARTHOUR,
    MIN(CASE WHEN AvJT='00001a' THEN data_source END) [00001a],
    MIN(CASE WHEN AvJT='00002a' THEN data_source END) [00002a],
    MIN(CASE WHEN AvJT='00003a' THEN data_source END) [00003a],
    MIN(CASE WHEN AvJT='00004a' THEN data_source END) [00004a]
    FROM YOURTABLE
    GROUP BY  DATE_1,STARTHOUR
    

    編集:

    更新された質問を更新しています。

    data_sourceをフィルタリングするための変数を宣言します

    DECLARE @DATASOURCE VARCHAR(20) = '1' 
    

    QUOTENAMEの代わりに 、別の形式を使用して、ピボットの列を取得できます

    DECLARE @cols NVARCHAR (MAX)
    
    SELECT @cols = COALESCE (@cols + ',[' + Link_ID + ']', '[' + Link_ID + ']')
                   FROM    (SELECT DISTINCT Link_ID FROM C1_May_Routes WHERE [email protected]) PV  
                   ORDER BY Link_ID
    

    今度はピボット

    DECLARE @query NVARCHAR(MAX)
    SET @query = 'SELECT * FROM 
                 (
                     -- We will select the data that has to be shown for pivoting
                     -- with filtered data_source
                     SELECT date_1, StartHour,AvJT, Link_ID
                     FROM C1_May_Routes
                     WHERE data_source = '[email protected]+'
                 ) x
                 PIVOT 
                 (
                     -- Values in each dynamic column
                     SUM(AvJT)
                     -- Select columns from @cols 
                     FOR Link_ID IN (' + @cols + ')                      
                ) p;' 
    
    EXEC SP_EXECUTESQL @query
    


    1. DOSバッチスクリプトでsqlplusエラーを検出しますか?

    2. ORA-29280の解決方法:無効なディレクトリパス

    3. Pythonを使用したMySQLへの接続

    4. プリペアドステートメントを使用して適切なmysqli拡張クラスを作成するにはどうすればよいですか?