0

SQL Server 2008 での複数列ピボットに関する問題があります。例を挙げて説明したいと思います。

以下は、内部結合と左外部結合を使用して 6 つの異なるテーブルを結合した結果です。

ID  Type    Date    Location    Result  Proc    ProcDate    ProcDetail        ProcNotes
--------------------------------------------------------------------------------------
1   ABC    1/1/2010   OK          AO    Proc_A  1/1/2013   This is Detail   Proc_A Notes
1   XYG    1/2/2011                     Proc_A  1/1/2013   This is Detail   Proc_A Notes
1   ABC    1/1/2010   OK          AO    Proc_B  1/1/2011   This is Detail   Proc_B Notes
1   XYG    1/2/2011                     Proc_B  1/1/2011   This is Detail   Proc_B Notes

上表の詳細はこちら

ABC と XYG の 2 つのタイプと関連する日付があります。

Location と Result は Type ABC に関連付けられています

2 つの Proc Proc_A および Proc_B と関連する日付があります。

ProcDetail と ProcNotes は、Proc Proc_A に関連付けられています。

既知の値はありません

上記の結果セットの代わりに、以下のように単一の行に結果を表示したいと思います。

ID       Type1     Date1       Type2     Date2     Location   Result    Proc1     ProcDate1    ProcNotes1        ProcDetail           Proc2       ProcDate2      ProcNotes2
 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 1        ABC     1/1/2010      XYZ     1/2/2011    OK         AO       Proc_A     1/1/2013    Proc_A Notes       This is Detail       Proc _B      1/1/2011         Proc_B Notes

調べてくれてありがとう。

4

1 に答える 1

1

値が事前にわかっている場合は、条件付き集計を行うことができ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のデモです

于 2013-11-06T01:41:56.557 に答える