- 締切済み
SQLを教えてください。
テーブルAとテーブルBは1:Nの関係です。 取得したい値が上手く取れないため、テーブルAにテーブルBのJOINを2回実行して取得している為、パフォーマンスが悪いです。 1回で取得する方法、もしくはパフォーマンスが良い方法があれば教えてください。 ■テーブルA(PKはa1) a1 001 002 003 ■テーブルB(PKはb1,b2,b3) b1 b2 b3 b4 001 1 3 aaa 001 1 2 bbb 001 1 1 ccc 001 2 3 ddd 001 2 1 eee 002 1 1 fff 002 2 3 ggg 002 2 2 hhh ■取得したい結果 a1 b4-1 b4-2 001 aaa ddd 002 fff ggg
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
今のSQLを書くなり、ちゃんと説明をしないと回答がつきにくいと思いますよ。 想像して書くとこんな感じ。 select a1, max(case when b2=1 and R=1 then b4 end) "b4-1", max(case when b2=2 and R=1 then b4 end) "b4-2" from ( select a1,b4,row_number() over(partition by b1,b2 order by b3 desc) R from a,b where a1=b1 ) group by a1 ;
- uresiiwa
- ベストアンサー率45% (49/107)
よくある、「縦の物を横にする」SQL (年月単位のレコードを、列1:1月、列2:2月という風に取るものを、私はそう呼んでいます。一般的な名称ではないです(^^)) なのだと思いますが、たしかに書き方によってはとてもパフォーマンスが悪くなりますね。 しかしぱっと見、仕様が分からないためアドバイスしにくい状態です。 詳細な仕様(b4-1,b4-2に何をもってきたいか)か、現状のSQL(パフォーマンスが悪くてもよいです)を補足していただければアドバイスできるかと思います。