• 締切済み

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

みんなの回答

回答No.2

今の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)
回答No.1

よくある、「縦の物を横にする」SQL (年月単位のレコードを、列1:1月、列2:2月という風に取るものを、私はそう呼んでいます。一般的な名称ではないです(^^)) なのだと思いますが、たしかに書き方によってはとてもパフォーマンスが悪くなりますね。 しかしぱっと見、仕様が分からないためアドバイスしにくい状態です。 詳細な仕様(b4-1,b4-2に何をもってきたいか)か、現状のSQL(パフォーマンスが悪くてもよいです)を補足していただければアドバイスできるかと思います。

関連するQ&A