- ベストアンサー
ORACLEのUPDATEについて教えてください
- ORACLEのUPDATEについて教えてください。ORACLE9i、PL/SQLを想定しています。
- 【店舗T】に、【売上T】の売上区分が”2”のレコードを最大5日分設定する。
- 対象となる【売上T】のレコードは、予定日が指定日以降のみ対象とします。【店舗T】の売上履歴は毎回クリアし、売上Tより求めます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>PL/SQLを想定しています の意味がちょっとわからないのですが、ひとつのSQLで書いてみました。 売上Tの売上区分='2'・予定日が指定日以降のレコードを 店舗ごとに日付順に番号付けして、番号で設定項目を振り分けます。 --全角でインデントしています update tenpo_t set (plan1,plan2,plan3,plan4,plan5) = (select max(plan1),max(plan2),max(plan3),max(plan4),max(plan5) from (select tenpo ,case when recnum = 1 then yotei else null end plan1 ,case when recnum = 2 then yotei else null end plan2 ,case when recnum = 3 then yotei else null end plan3 ,case when recnum = 4 then yotei else null end plan4 ,case when recnum = 5 then yotei else null end plan5 from (select tenpo,yotei,row_number() over(partition by tenpo order by yotei) recnum from uriage_t where kbn = '2' and yotei >= /* 指定日 */ date'2010-12-11') where recnum <= 5) src where tenpo_t.tenpo = src.tenpo group by tenpo); ORACLE10g XEでの確認なので9iではうまくいかないかもしれませんが参考までに。
その他の回答 (1)
- taka451213
- ベストアンサー率47% (436/922)
こんばんは。 うーん・・・、 SELECT 店舗, 予定日, SORT_NUM FROM (SELECT 店舗, 予定日, ROW_NUMBER() OVER (PARTITION BY 店舗 ORDER BY 予定日 DESC) AS SORT_NUM FROM 売上T WHERE 売上区分 = 2 AND 予定日 >= 指定日(12/10)) WHERE SORT_NUM <= 5 ORDER BY 店舗, 予定日 ネストしなくてもいいかも・・・? 問題は縦に取れたものを横にしないといけないという事です。 上のSQLを5回自己結合すれば何とかなるかな・・・?
お礼
taka451213 様 ご回答、ありがとうございました。 このSQLを参考にさせて頂きます。 まだPS段階なので環境もなく実践出来ていませんが、環境出来次第、 このSQLを参考に試行錯誤してみたいと思います。 またよろしくお願い致します。