1

いくつかの質問を読みましたが、明確ではなく、ピボットを使用できません

次のテーブルがあります。

ID AREA CAR
1   A1   A
1   A2   B
1   A3   C
2   A1   D
2   A2   E
3   A2   F
3   A3   G

そして、私はいくつかのようなものが欲しい

ID  AREA1  CAR1  AREA2  CAR2  AREA3  CAR3
1     A1     A    A2     B      A3    C         
2     A1     D    A2     D     null  null                   
3    null   null  A2     F      A3    G                    

エリアの数は固定で、A1、A2、A3 のみです。

私は試してみました

SELECT     id, area1,car1,area2,car2
FROM       (  SELECT        id,
                        case when AREA='A1' then AREA else NULL end area1,
                        case when AREA='A1' then CAR else NULL end car1,   
                        case when AREA='A2' then AREA else NULL end area2,
                        case when AREA='A2' then CAR else NULL end car2,
                        case when AREA='A3' then AREA else NULL end area3,
                        case when AREA='A3' then CAR else NULL end car3
          FROM        TABLA
          GROUP BY    id );

しかし、私は得る:

"not a GROUP BY expression"

正しい GROUP BY 式を作成し、テーブルを正しく転置するにはどうすればよいですか? それを行うためのより良い解決策はありますか?

前もって感謝します

4

2 に答える 2

2

残念ながら、Oracle 10 には PIVOT 関数はありません。クエリは近いですが、別のクエリの中にラップする必要はありません。

select id,
  min(case when area = 'A1' then area end) area1,
  min(case when area = 'A1' then car end) car1,
  min(case when area = 'A2' then area end) area2,
  min(case when area = 'A2' then car end) car2,
  min(case when area = 'A3' then area end) area3,
  min(case when area = 'A3' then car end) car3
from yourTable
group by id
于 2012-08-09T17:45:49.520 に答える
1

を実行するときは、GROUP BYグループ化していない列を集約する必要があります。あなたはおそらく次のようなものが欲しいでしょう

SELECT     id, area1,car1,area2,car2
FROM       (  SELECT        id,
                        max( case when AREA='A1' then AREA else NULL end) area1,
                        max( case when AREA='A1' then CAR else NULL end) car1,   
                        max( case when AREA='A2' then AREA else NULL end) area2,
                        max( case when AREA='A2' then CAR else NULL end) car2,
                        max( case when AREA='A3' then AREA else NULL end) area3,
                        max( case when AREA='A3' then CAR else NULL end) car3
          FROM        TABLA
          GROUP BY    id );

集計とGROUP BYを外部クエリに移動することもできます

SELECT     id, max(area1),max(car1),max(area2),max(car2)
FROM       (  SELECT        id,
                        case when AREA='A1' then AREA else NULL end area1,
                        case when AREA='A1' then CAR else NULL end car1,   
                        case when AREA='A2' then AREA else NULL end area2,
                        case when AREA='A2' then CAR else NULL end car2,
                        case when AREA='A3' then AREA else NULL end area3,
                        case when AREA='A3' then CAR else NULL end car3
          FROM        TABLA)
GROUP BY    id;
于 2012-08-09T17:40:58.527 に答える