• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ORACLEのUPDATEについて教えてください)

ORACLEのUPDATEについて教えてください

このQ&Aのポイント
  • ORACLEのUPDATEについて教えてください。ORACLE9i、PL/SQLを想定しています。
  • 【店舗T】に、【売上T】の売上区分が”2”のレコードを最大5日分設定する。
  • 対象となる【売上T】のレコードは、予定日が指定日以降のみ対象とします。【店舗T】の売上履歴は毎回クリアし、売上Tより求めます。

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

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答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ではうまくいかないかもしれませんが参考までに。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答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回自己結合すれば何とかなるかな・・・?

tkuzume
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ORACLE UPDATE文の書き方について

    いつもお世話になっています。 SQLのUPDATEについて、教えてください。 (例) 売上実績には、売上日を過去3回前まで保存しており、 売上トランの売上区分が”1”の情報を元に、売上実績の売上日情報を更新しています。 【売上実績】 │店舗│今 回│前 回│前々回│ ┼──┼───┼───┼───┼ │A店│12/05 │10/25 │10/01 │ │B店│11/15 │10/18 │09/05 │ │C店│11/30 │10/05 │09/15 │ │D店│12/01 │12/01 │11/01 │ │E店│12/07 │11/07 │10/07 │ │F店│11/18 │10/17 │08/11 │ 【売上トラン】 │店舗│売上日│売上区分│ ┼──┼───┼────┼ │A店│12/08 │ 1 │ ※繰越対象 │A店│12/08 │ 2 │ │B店│12/08 │ 2 │ │C店│12/08 │ 1 │ ※繰越対象 │D店│12/08 │ 2 │ │F店│12/08 │ 2 │ ーー結果ーー 【売上実績】 │店舗│今 回│前 回│前々回│ ┼──┼───┼───┼───┼ │A店│12/08 │12/05 │10/25 │ ※繰り越される │B店│11/15 │10/18 │09/05 │ │C店│12/08 │11/30 │10/05 │ ※繰り越される │D店│12/01 │12/01 │11/01 │ │E店│12/07 │11/07 │10/07 │ │F店│11/18 │10/17 │08/11 │ ※Keyは”店舗”  UPDATE 売上実績   Set 売上実績.今回 =        (Select 売上トラン.売上日 From 売上トラン           Where 売上トラン.店舗 = 売上実績.店舗 AND 売上トラン.売上区分= 1 ),     前回 = 今回,     前々回 = 前回       Where Exists ( Select 売上トラン.* From 売上トラン              Where 売上トラン.店舗 = 売上実績.店舗               AND 売上トラン.売上区分= 1 ) 上記処理をPL/SQLで行いたいのですが、正しい処理結果が作成されるのでしょうか? よろしくお願いします。 ※ORACLE環境がなく、ACCESSではうまく動作しなった為、質問させて頂きました・・・

  • ORACLE UPDATE・INSERTについて

    いつもお世話になります。 ORACLE9i・PL/SQL上で複雑!?なUPDATE&INSERTがあり、それぞれを別々に 処理することにはしました。 ただ、UPDATE、INSERTをそれぞれ一回で完了させるSQLが掛けません (私には複雑すぎるので・・) どなたか以下の処理を実現する、UPDATE文、INSERT分を教えて頂けないでしょうか? 例) 店舗別の【予算T】があります。 ・予算額欄が、ゼロの場合、UPDATEを行う  (1)【店舗M】の「業種区分」を求める  (2)「業務区分」より、【業務分類】の「予算G」を求める  (3)「予算G」より【グループ別予算】の予算額を求める  (4)求めた予算額で、【予算T】の「予算額」を更新する。 ・【予算T】に存在しない店舗の予算レコードのINSERTを行う  (1)【予算T】に存在しない店舗の「業種区分」を【店舗M】より求める  (2)「業種区分」より【業務分類】の「予算G」を求める  (3)「予算G」より【グループ別予算】の予算額を求める  (4)求めた予算額、店舗の情報を【予算T】にレコード登録する。 【予算T】 │店舗│予算額│ ┼──┼───┼ │A店│ 5000 │ │C店│ 0000 │ │D店│ 3500 │ 【店舗M】 │店舗│コード│業務区分│ ┼──┼───┼────┼ │A店│00001 │001   │ │B店│00002 │001   │ │C店│00003 │003   │ │D店│00004 │003   │ │F店│00030 │002   │ 【業務分類】 │業務区分│予算G│ ┼────┼───┼ │ 001  │ A │ │ 002  │ A │ │ 003  │ B │ │ 004  │ C │ 【グループ別予算】 │予算G│予算額│ ┼───┼───┼ │ A │10000 │ │ B │05000 │ │ C │05000 │ │ D │03000 │ ーー結果ーー ・UPDATE 【予算T】 │店舗│予算 │ ┼──┼───┼ │A店│ 5000 │ │C店│ 5000 │ │D店│ 3500 │ ・INSERT後(最終結果) 【予算T】 │店舗│予算 │ ┼──┼───┼ │A店│ 5000 │ │B店│10000 │ │C店│ 5000 │ │D店│ 3500 │ │F店│10000 │

  • ORACLE UPDATEについて

    いつもお世話になっています。 SQLのUPDATEについて、教えてください。 (例) 各店舗の売上累積ファイルに、日ごとの売上トランの情報を累計する。 処理日が12月31日の場合、年次繰越を行う。 売上実績ファイル │店舗│当年売上│前年売上│ ┼──┼────┼────┼ │A店│ 50000 │ 60000 │ │B店│ 25000 │ 32000 │ 売上トラン │店舗│本日売上│ ┼──┼────┼ │A店│ 25000 │ │B店│ 14000 │ ーー結果(12月31日の処理の場合)ーー 売上実績ファイル │店舗│当年売上│前年売上│ ┼──┼────┼────┼ │A店│   0 │ 75000 │ │B店│   0 │ 39000 │ ーー結果(12月31日以外の場合)ーー 売上実績ファイル │店舗│当年売上│前年売上│ ┼──┼────┼────┼ │A店│ 75000 │ 60000 │ │B店│ 39000 │ 32000 │ ※Keyは”店舗”、実績とトランの関係は1:1 UPDATE 売上実績ファイル SET 前年売上 = CASE ( WHEN WK-処理日 = 12/31        THEN 売上実績ファイル.当年売上 + 売上トラン.本日売上        ELSE 売上実績ファイル.前年売上 ) SET 当年売上 = CASE ( WHEN WK-処理日 = 12/31        THEN 0        ELSE 売上実績ファイル.当年売上 + 売上トラン.本日売上 ) WHERE 売上実績ファイル.店舗 = 売上トラン.店舗 上記処理をPL/SQLで行いたいのですが、正しい処理結果は求まるのでしょうか? よろしくお願いします。 ※環境がなく、動作検証が出来ない為、質問させて頂きました・・・

  • PL/SQL 条件アップデートについて

    PL/SQLを使用して、条件に合致するレコードのみをアップデートしようとした場合 この条件が他のテーブルを参照しなければいけない時どのようなロジックで実現できるでしょうか? 例えば下記のようなアップデート対象テーブルがあります。 トランT 取引先| 年月 |店舗区分1 |売上  AAA   201105     1     10000 マスタT 取引先| 開始日 | 終了日  AAA   20100501  20110608 トランTは月別店舗別の売上を管理しているテーブルで マスタTは店舗の休業日数を管理いているマスタテーブルになります。 更新を行いたいのはトランTのフィールド「店舗区分1」でその条件は 前年同月に休業日が発生している店舗の「店舗区分1」を'2'に変更したい場合どのようにすれば これを実現できるでしょうか? やり方は複数あると思うのですがPL/SQLで実現できればと思っています。 しかし、PL/SQL初心者の為これに必要なコマンドや関数などがわかりません。 調べてみてもこのようなケースのサンプルなどが無く困っています。 どなたか詳しい方がいればご教示頂きたく存じます。 よろしくお願いします。

  • SUMPRODUCT 複数条件設定で、計算式結果がおかしいです。

    下記のような表があったと仮定します。   A  B   C   D 1 月度 店舗 品目 売上金額 2 4   A   あ  22300 3 4   B   あ  18700 4 4   C   あ  14500 5 4   A   い  17950 6 5   B   あ  44000 7 5   C   い  35000 8 5   A   う  12000 9 5   B   い  13400 この表から、 店舗「A」、品目「あ」の売上合計は、22300になり、 数式「=SUMPRODUCT(($B$2:$B$9="A")*($C$2:$C$9="あ")*$D$2:$D$9)」で計算できます。 店舗「A,B」、品目「あ」の売上合計は、85000になり、 数式「=SUMPRODUCT(($B$2:$B$9={"A","B"})*($C$2:$C$9="あ")*$D$2:$D$9)」で計算できます。 店舗「A」、品目「あ,い」の売上合計は、40250になり、 数式「=SUMPRODUCT(($B$2:$B$9="A")*($C$2:$C$9={"あ","い"})*$D$2:$D$9)で計算できます。 しかし、 店舗「A,B」、品目「あ,い」の売上合計は、116350なのですが、 数式「=SUMPRODUCT(($B$2:$B$9={"A","B"})*($C$2:$C$9={"あ","い"})*$D$2:$D$9)」では、数値がおかしく(35700に)なります。 数式の使い方が間違っているのでしょうか? アドバイスをお願いします。

  • A列に日付、B列にその日の売り上げ、C列に当月累計、D列に年間累計を入

    A列に日付、B列にその日の売り上げ、C列に当月累計、D列に年間累計を入れた日計表((1))を作成しました。 (1)を作成する元となるのが各店舗からの一件づつの売り上げの紙で、それを店舗ごとにまとめた表を作成し((2))、その表を(1)に連動させ、(2)を入力すれば(1)の表が完成するというようなものを作りたいのですが、、できるのでしょうか。。 どうすればいいのかわかりません。 どなたかいいアドバイスがあればお願いします。

  • Oracleの外部結合について

    お世話になります。 次のSQLの結果についてわかられる方がいらっしゃればご回答お願いします。 間違っている部分があるのは承知していますが、ひとまずなぜこういう結果になるのかを教えていただきたいです。 SELECT A.KOUMOKU FROM A, B, C, D WHERE A.KOUMOKUNO = B.KOUMOKUNO(+) AND A.KOUMOKUNO = C.KOUMOKUNO(+) AND A.KOUMOKUNO = D.KOUMOKUNO(+) 各テーブルのデータは次のようにします。 A ------------------- KOUMOKUNO KOUMOKU 1         aaa 2         bbb 3         ccc 4         ddd 5         eee ------------------- B,C,D ------------------- KOUMOKUNO KOUMOKU 1         aaa 1         aaa 1         aaa ------------------- この場合、結果が31件となります。 調査した結果、次のような計算をもとに結果が返ってきているようなのです。 Aの4件(Aのみ存在)+(3(Bの件数)×3(Cの件数)×3(Dの件数))=29件 なぜ最後の外部結合でB,C,Dの件数が乗算されるのか教えていただきたいのです。 よろしくお願いします。

  • エクセルの値の照合

    エクセル初心者です。宜しくお願いしますm(__)m 各店舗の売上の入金確認作業を行っています。 シート1と、シート2と照合し、A・B・D・E列が同じ値であれば、シート1から行ごと削除したいのですができますでしょうか。 ※C列は、入金があった際に日付が入ります。 G列は、確認をした際に日付が入ります。 シート1   A    B     C     D      E      F     G  ・・・ 1 店舗   日付   入金日  売上額   手数料  担当   確認日 2 A店   1/5   未収     \10,000   \2,000  田中   3 B店   1/6   未収     \20,000   \4,000  長谷 シート2   A    B     C     D      E      F     G  ・・・ 1 店舗   日付   入金日  売上額   手数料  担当   確認日 2 A店   1/5   2/5     \10,000   \2,000  田中   2/10 3 B店   1/6   2/8     \20,000   \4,000  長谷   2/10 宜しくお願いします!!

  • Excel 検索値について

    どなたかご教授ください。宜しくお願い致します。 【Sheet1】 --------------------------------------------------   A   |   B  |  C   |  D(AとBを繋げた番号) -------------------------------------------------- 店舗番号 | 支店番号 |  売上  | 管理番号  -------------------------------------------------- 369    |   1  | 123,000 | 369-1 -------------------------------------------------- 258    |   1  |  45,000 | 258-1 -------------------------------------------------- 258    |   2  |  45,000 | 258-2 -------------------------------------------------- 258    |   3  |  8,000 | 258-3 -------------------------------------------------- 147    |   1  |  9,000 | 147-1 -------------------------------------------------- 147    |   2  |  1,000 | 147-2 -------------------------------------------------- 【Sheet2】 -----------------------------------------   A   |   B  |  C   |   -----------------------------------------  検索値 |  258  |      |   ----------------------------------------- 検索値に店舗番号「258」を入力し、「258-1~258-3」の 売上を下記のように表示させたいのですが、どうすれば 良いでしょうか。宜しくお願いします。 ↓ --------------------------      |  売上   | --------------------------      |  45,000  | ←258-1の売上 --------------------------      |  45,000  | ←258-2の売上 --------------------------      |  8,000   | ←258-3の売上 --------------------------      |        | --------------------------      |        | --------------------------  合計  |  98,000   | --------------------------

  • SQLの作成について

    以下のSQLが作りたいのですが 作れなくて困っています。 有識者の方、お助けください。 環境:SqlServer2008 ★詳細説明 テーブルA、B、Cがあるとします。 A-B 1対1 B-C は1対N A,B,Cは全て検索・表示対象になります。 A-Bに対する検索表示は問題ないのですが Cの発送区分(1:未発送 2:発送済み)を検索条件と するSQL作成に悩んでおります。 ★テーブル・構成データ A 年度 顧客CD 顧客名称 2010 1000 A社 2010 1001 B社 2010 1002 C社 2010 1003 D社 B 年度 顧客CD サービス開始日 2010 1000  2011/04/1 2010 1001  2011/04/2 2010 1002  2011/04/3 2010 1003  2011/04/4 C 年度 顧客CD 部署 発送区分 発送日 2010 1000 A 1 2010 1001 A 1 2010 1001 B 2 2010/10/11 2010 1001 C 2 2010/10/12 2010 1003 D 1 2010 1003 D 2 2010/10/20 ★実現したいSQL 1.発送区分に検索条件を設定しない場合   年度 顧客CD 発送区分 発送日   2010 1000 1   2010 1001 2 2010/10/12   2010 1002 1   2010 1003 2     2010/10/20 2.発送区分を未発送   年度 顧客CD 発送区分 発送日   2010 1000 1   2010 1002 1 3.発送区分を発送済み   年度 顧客CD 発送区分 発送日   2010 1001 2 2010/10/12   2010 1003 2 2010/10/20 1~3を1回のSQLで実行したいのですが 実現できておりません。 よろしくお願いします。