• 締切済み

複数の行を集約するSQLについて

以下のテーブルのレコードをもとに A B C 1| あ | あ | 1 | 2| あ | い | 1 | 3| あ | う | 1 | 4| う | あ | 1 | 5| え | あ | 1 | 6| あ | あ | 2 | 7| あ | い | 2 | 8| あ | う | 2 | 9| う | あ | 2 | 以下のテーブルを作成したいと考えています。 A B C D E 1| あ | あ | 1 | あ | - | 2| あ | い | 1 | い | - | 3| あ | う | 1 | う | あ | 4| え | あ | 1 | - | え | 5| あ | あ | 2 | あ | - | 6| あ | い | 2 | い | - | 7| あ | う | 2 | う | あ | (1)カラムCを1つのグループとします。 (2)その中でカラムAの値が「あ」の場合は、カラムBの値をカラムDに設定する。 (3)カラムAの値が「あ」ではない場合は、カラムBの値をカラムEに設定する。 (4)カラムAの値とカラムBの値を入替えると同じ場合は(例では上の表の3と4、8と9のレコード)、 カラムAの値が「あ」でない方のレコード(4と9のレコード)のカラムBの値をカラムEに設定する。 (5)(4)で値を設定した方のレコードを削除する。 どのようなSQLを作成すればできるのでしょうか? SQLに詳しい方がいらっしゃれば、ご教授をお願います

みんなの回答

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

結果に >4| え | あ | 1 | - | え | とありますが、ここって 4| え | あ | 1 | - | あ | になりますよね? なにも考えずに書いたので、もっときれいな書き方があると思いますが、 SELECT   A  , B  , C  , CASE     WHEN A = 'あ' THEN B     ELSE '-'   END D  , CASE     WHEN A <> 'あ' THEN B     ELSE NVL(       (         SELECT           B         FROM           T T3         WHERE           T3.A <> T1.A         AND T3.B <> T1.B         AND T3.A = T1.B         AND T3.B = T1.A         AND T3.C = T1.C       )       , '-')   END E FROM   T T1 WHERE   NOT EXISTS (     SELECT       *     FROM       T T3     WHERE       T1.A <> 'あ'     AND T3.A = T1.B     AND T3.B = T1.A   ) ORDER BY   C  , A  , B; とりあえず、書いてあることだけは満たす結果になると思います。

関連するQ&A