• ベストアンサー
  • すぐに回答を!

複数レコードのデータを1レコードに集約したい

  • 質問No.4822574
  • 閲覧数517
  • ありがとう数1
  • 回答数1

お礼率 57% (52/90)

お世話になります。
複数レコードのデータを1レコードに集約したいのですが色々試してみましたが上手くいきません。

まず、以下のようなテーブルがあります。

TableA(キーはID)
ID NO
1, 2

TableB(キーはIDとNO)
ID NO SYU_NO FUKU_NO
1, 1, 1, 1
1, 2, 1, 2
1, 3, 2, 1
2, 1, 1, null
   ・
   ・

TableC(キーはIDとKUBUNとNO)
ID KUBUN(SYU or FUKU) NO START END KAKUNIN
1, 1, 1, 20090101, 20091231, 20090310
1, 1, 2, 20090201, 20091130, 20090310
1, 2, 1, 20090401, 20100331, 20090312
   ・
   ・

これを、以下のようなレコードにしたいのですが・・。
ID START(SYU_NO) END(FUKU_NO) START(FUKU_NO) END(FUKU_NO)
1, 20090101, 20091231, 20090401, 20100331

以下のようなselect文を作成しましたが・・。
select
A.ID || ',' ||
case when C.KUBUN = 1 then C.START end || ',' ||
case when C.KUBUN = 1 then C.END end || ',' ||
case when (C.KUBUN = 2 and B.FUKU_NO = C.NO) then C.START end || ',' ||
case when (C.KUBUN = 2 and B.FUKU_NO = C.NO) then C.END end || ',' ||
from
TableA A
inner join
TableB B
on
A.ID = B.ID
and A.NO = B.NO
inner join
TableC C
on
B.ID = C.ID
and ((C.KUBUN = 1 and B.SYU_NO = C.NO)
or (C.KUBUN = 2 and B.FUKU_NO = C.NO))
;

以下のような結果が返ってきます。
ID START(SYU_NO) END(FUKU_NO) START(FUKU_NO) END(FUKU_NO)
1, 20090101, 20091231, ,
1, , , 20090401, 20100331

実は別サイトでも投稿しておりますが回答がなく大変困っております。
どうか宜しくお願い致します。

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 88% (591/669)

今実際には試せないのですが、IDをキーにMAXを使ってグルーピングしたらできませんか?
お礼コメント
ryozyryozy

お礼率 57% (52/90)

集計関数で上手くいきました。どうもありがとうございました。
投稿日時:2009/03/26 08:00
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ページ先頭へ