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

複数列ピボット SQL Server

    値が ABC の場合 および XYG 事前にわかっている場合は、条件付き集計を行うことができます

    SELECT ID,
           MAX(CASE WHEN type = 'ABC' THEN 'ABC' END) Type1,
           MAX(CASE WHEN type = 'ABC' THEN Date END) Date1,
           MAX(CASE WHEN type = 'XYG' THEN 'XYZ' END) Type2,
           MAX(CASE WHEN type = 'XYG' THEN Date END) Date2,
           MAX(Location) Location,
           MAX(Result) Result,
           MAX(CASE WHEN type = 'ABC' THEN [Proc] END) Proc1,
           MAX(CASE WHEN type = 'ABC' THEN ProcDate END) ProcDate1,
           MAX(CASE WHEN type = 'ABC' THEN ProcDetail END) ProcDetail1,
           MAX(CASE WHEN type = 'ABC' THEN ProcNotes END) ProcNotes1,
           MAX(CASE WHEN type = 'XYG' THEN [Proc] END) Proc2,
           MAX(CASE WHEN type = 'XYG' THEN ProcDate END) ProcDate2,
           MAX(CASE WHEN type = 'XYG' THEN ProcDetail END) ProcDetail2,
           MAX(CASE WHEN type = 'XYG' THEN ProcNotes END) ProcNotes2
      FROM
    (
      SELECT * FROM table1 -- that's to emulate your current query with multiple joins
    ) q
     GROUP BY ID
     

    出力例:

    <プレ>| ID | TYPE1 | DATE1 | TYPE2 | DATE2 |ロケーション |結果 | PROC1 | PROCDATE1 | PROCDETAIL1 | PROCNOTES1 | PROC2 | PROCDATE2 | PROCDETAIL2 | PROCNOTES2 ||----|-------|--------------------------------|- ------|--------------------------------|---------- |--------|--------|--------------------------------------------- --|-----|--------------|--------|------ --------------------------|-----------------|----- ------|| 1 | ABC | 2010 年 1 月 1 日 00:00:00+0000 | XYZ | 2011 年 1 月 2 日 00:00:00+0000 |わかりました |あお | Proc_B | 2013 年 1 月 1 日 00:00:00+0000 |これは詳細です | Proc_B ノート | Proc_B | 2013 年 1 月 1 日 00:00:00+0000 |これは詳細です | Proc_B メモ |

    SQLFiddle はこちら デモ




    1. MysqlDBからJFreechartTimeSeriesCollectionにデータを入力しますか?

    2. modxサイトをサブフォルダーからルートフォルダーに移動します

    3. 列の整数値に基づいて結果の行を繰り返します

    4. EntityFrameworkOracleおよびSQLServer-データベースに依存しないアプリケーションを構築する方法