- 締切済み
複数の行を集約する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に詳しい方がいらっしゃれば、ご教授をお願います
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- yamada_g
- ベストアンサー率68% (258/374)
結果に >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; とりあえず、書いてあることだけは満たす結果になると思います。