プロが教える店舗&オフィスのセキュリティ対策術

SQLの書き方について質問です。
VIEW(SQL)を作成した時に結果が以下のようになりました。

--------------------------------------
SEIHIN_CD KOJO_CD CAL_DATE KEIKAKU
--------------------------------------
001111    430    20060724    1000
001111    430    20060724    0
001111    430    20060725    0
001111    431    20060724    0

本来なら、SEIHIN_CD,KOJO_CD,CAL_DATEの3つを主キーとしたいので
表の一番上の2行のうちKEIKAKU=1000の方を残しKEIKAKU=0の方を削除したいと思います。
(重複キーの一番上の行のみ残します)
削除したいというよりは本来なら下記のような抽出を行いたいです。

--------------------------------------
SEIHIN_CD KOJO_CD CAL_DATE KEIKAKU
--------------------------------------
001111    430    20060724    1000
001111    430    20060725    0
001111    431    20060724    0

SQL(PL/SQL?)の書き方が解らないのでどなたか教えていただけますと助かります。

文字制限がありますので説明が簡素になりますが、こちらのページを見てSQLを作成しています。

http://oraclesqlpuzzle.hp.infoseek.co.jp/7-64.html

以下が作成したSQLになります。

SELECT distinct a.SEIHIN_CD,a.KOJO_CD,b.CAL_DATE,decode(a.YMD,b.CAL_DATE,a.KEIKAKU,0) as KEIKAKU,b.CAL_WEEK,b.CAL_KBN
from (select SEIHIN_CD,KOJO_CD,KEIKAKU,YMD from T_SEISAN_KEIKAKU)
a,M_00_CALENDER b
order by seihin_cd,kojo_cd,cal_date,keikaku desc

カレンダーのテーブル=M_00_CALENDER
売上テーブル=T_SEISAN_KEIKAKUとなっています。

以上となりますがよろしくお願いいたします。

A 回答 (1件)

3つのキーで集約したら良いのでは内のでしょうか。




select A.SEIHIN_CD, A.KOJO_CD, A.CAL_DATE, A.KEIKAKU
, B.CAL_WEEK, B.CAL_KBN
from (
selet SEIHIN_CD
, KOJO_CD
, CAL_DATE
, sum( decode( A.YMD, B.CAL_DATE, A.KEIKAKU,0 ) ) as KEIKAKU
from T_SEISAN_KEIKAKU A
group by SEIHIN_CD
, KOJO_CD
, CAL_DATE
)
, M_00_CALENDER B
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。SUMとGROUPを使うのですね。
早速やってみました。

ちょっと上手くいかないところがあったのでこちらで修正させてもらったところ無事になりました。大変助かりましたありがとうございました!
一応その部分のSQLソースを貼っておきます。

select SEIHIN_CD,KOJO_CD,CAL_DATE, sum( decode(A.YMD,B.CAL_DATE,A.KEIKAKU,0 )) as KEIKAKU
from T_SEISAN_KEIKAKU A,M_00_CALENDER B group by SEIHIN_CD,KOJO_CD,CAL_DATE order by seihin_cd,kojo_cd,cal_date

お礼日時:2007/08/24 10:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!