dポイントプレゼントキャンペーン実施中!

いつもお世話になっています。

以下の処理を実現するUPDATEの記述を教えて頂けないでしょうか?

よろしくお願い致します。

(ORACLE9i、PL/SQLを想定しています)


【店舗T】に、【売上T】の売上区分が”2”のレコードを対象に、予定日が指定日より近い順に
最大5日分設定する。

※対象となる【売上T】のレコードは、予定日が指定日以降のみ対象とする
※【売上T】は各店舗毎に、0件から数十件まで存在する。
※【店舗T】の売上履歴は毎回クリアし、売上Tより求める

【店舗T】
│  │   売 上 予 定 情 報     │
│店舗│直近1│直近2│直近3│直近4│直近5│
┼──┼───┼───┼───┼───┼───┼
│A店│   │   │   │   │   │
│B店│   │   │   │   │   │
│C店│   │   │   │   │   │
│D店│   │   │   │   │   │

【売上T】
│店舗│予定日│売上区分│
┼──┼───┼────┼
│A店│12/10 │ 2 │○対象
│A店│12/20 │ 2 │○対象
│A店│12/30 │ 1 │※売上区分が”1”の為、対象外
│A店│12/31 │ 2 │○対象
│  │   │    │
│C店│12/01 │ 2 │※指定日(12/10)より前の為、対象外
│C店│12/05 │ 2 │※指定日(12/10)より前の為、対象外
│C店│12/11 │ 2 │○対象
│C店│12/11 │ 1 │※売上区分が”1”の為、対象外
│C店│12/15 │ 2 │○対象
│C店│12/21 │ 2 │○対象
│C店│12/25 │ 2 │○対象
│C店│12/30 │ 2 │○対象
│C店│12/31 │ 2 │※5件を超えた為、対象外
│  │   │    │
│D店│12/15 │ 1 │※売上区分が”1”の為、対象外
│D店│12/18 │ 1 │※売上区分が”1”の為、対象外

---12月11日の結果---
【店舗T】
│  │   売 上 予 定 情 報     │
│店舗│直近1│直近2│直近3│直近4│直近5│
┼──┼───┼───┼───┼───┼───┼
│A店│12/20 │12/31 │ │   │   │
│B店│   │   │   │   │   │
│C店│12/11 │12/15 │12/21 │12/25 │12/30 │
│D店│   │   │   │   │   │

A 回答 (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ではうまくいかないかもしれませんが参考までに。
    • good
    • 0

こんばんは。



うーん・・・、
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回自己結合すれば何とかなるかな・・・?
    • good
    • 0
この回答へのお礼

taka451213 様

ご回答、ありがとうございました。

このSQLを参考にさせて頂きます。
まだPS段階なので環境もなく実践出来ていませんが、環境出来次第、
このSQLを参考に試行錯誤してみたいと思います。
またよろしくお願い致します。

お礼日時:2010/12/16 09:52

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

関連するカテゴリからQ&Aを探す