
いつもお世話になっています。
以下の処理を実現する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店│ │ │ │ │ │
No.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ではうまくいかないかもしれませんが参考までに。
No.1
- 回答日時:
こんばんは。
うーん・・・、
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を参考に試行錯誤してみたいと思います。
またよろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MySQLで改行を含む文の登録のし...
-
アクセスのクエリについて(前...
-
改行コードを削除して取得する...
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
エクセルVBAで5行目からオート...
-
Oracle 2つのDate型の値の差を...
-
Accessでテーブル名やクエリ名...
-
FROM の中で CASE を使えるでし...
-
テーブルの存在チェックについて
-
Accessクエリーで両方のテーブ...
-
スティックパリティの役割
-
ACCESSで400以上のフィールドが...
-
ACCESSのクエリで集計で、先頭...
-
Excel→Accessへ貼り付けがおかしい
-
DB2でREPLACEによる文字列の置換
-
【Access】フォームで自動計算...
-
エクセルグラフの凡例スペース
-
AccessのクエリをExc...
-
Accessでコードを入れると名前...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01722: 数値が無効です
-
フォームで検索 エラーの表示...
-
SQLでグループ化した結果の件数...
-
項目名の制限について
-
改行コードを削除して取得する...
-
MySQLで改行を含む文の登録のし...
-
集計のSQLをお教え下さい
-
アクセスのクエリについて(前...
-
SQL文 2つのテーブルから、グ...
-
Access クエリ内のクエリ
-
Accessで期間指定の売上合計と...
-
SQLが分かりません
-
updateについて(SQL)
-
SQL文 グループ集計TOPに対する...
-
オラクルSQLの累計値取得方法に...
-
集合関数(MIN)で取得した値を...
-
ORACLEのUPDATEについて...
-
日付に関するSQL分で
-
SQLの抽出方法について
-
列名無効について
おすすめ情報