• ベストアンサー

SQLについて

お世話になります。 いろいろ考えたのですが、わかりません。 教えてください。よろしくお願いします。 ●現在のSQLは SELECT 仕入先コード, 支払予定日, SUM(金額) FROM 仕入検収テーブル GROUP BY 仕入先コード,支払予定日 ●テーブルの構成は 仕入検収テーブル  仕入検収番号   (主キー)  仕入先コード  支払予定日  部門番号  金額 ●テーブルデータは 仕入検収番号 仕入先コード 支払予定日 部門番号 金額 1 0001000 2004/06/15 10 3000 2 0001000 2004/06/15 11 7000 3 0002000 2004/06/16 10 20000 4 0001000 2004/06/17 10 1000 上記のようなテーブルの時に 現在は仕入先コードと支払予定日ごとに集約されているのですが、その集約された仕入先コードを用いてその仕入先コードは過去に仕入検収テーブルに登録されていたら備考という項目に「新規」と表示したいのです。 ●実現したい実行結果は 支払予定日 仕入先コード 金額 備考 2004/06/15 00010000 10000 新規 2004/06/16 00020000 20000 新規 2004/06/17 00010000 1000

  • Oracle
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

こんなのとか。 ※未テストです。 SELECT T1.支払予定日, T1.仕入先コード, SUM(T1.金額) 金額, DECODE(T1.支払予定日, T2.初回支払予定日, '新規', NULL) 備考 FROM 仕入検収テーブル T1, (SELECT MIN(支払予定日) 初回支払予定日, 仕入先コード FROM 仕入検収テーブル GROUP BY 仕入先コード) T2 WHERE T1.仕入先コード = T2.仕入先コード GROUP BY T1支払予定日, T1.仕入先コード #1の方とはインラインビューの使い方がちょっと違いますね。

antonio123da
質問者

お礼

大変参考になりました。 ありがとうございました。

その他の回答 (1)

回答No.1

確認ですが、"新規"と出すのは最初に登録された年月日にのみに表示するでよろしいのでしょうか?それであれば、 select A.支払予定日, A.仕入先コード, A.金額, decode(A.支払予定日, B.支払予定日, '新規', '') 備考 from( select 仕入先コード, 支払予定日, sum(金額) 金額 from 仕入検収テーブル A group by 仕入先コード, 支払予定日 ) A inner join (select 仕入先コード, min(支払予定日) 支払予定日 from 仕入検収テーブル group by 仕入先コード ) B on (A.仕入先コード = B.仕入先コード) でよいと思います。1999構文でないSQLが必要の場合、または私が勘違いしている場合は別途書き込みをお願いいたします。

antonio123da
質問者

お礼

大変参考になりました。 ありがとうございました。

関連するQ&A

  • SQLで分からないことがあります。

    仕入明細テーブル 伝票NO   インデックス番号   部数 出費詳細テーブル 伝票NO  出費先  出費額 以上のデータがあります。 仕入明細テーブルでインデックス番号でグルーピング化して部数の合計値が2000以上のインデックス番号と同じ値の出費詳細テーブルの伝票NOのレコードを削除しなさい。 delete 出費詳細 where 伝票NO in (select インデックス番号, sum(部数) from 仕入明細             group by インデックス番号             having sum(部数) >= 100); これだと出来ませんよね? sum(部数)が100以上のものを抽出するためにはselectでsum(部数)としなくてはいけないのですが これだとダメですよね?伝票NOと同じか比較するのインデックス番号なので、selectでsum(部数)としないのは可能でしょうか?

  • MySQLで複数条件指定での抽出

    MySQLで複数条件指定での抽出 いつもお世話になりますm(__)m MySQLで複数の条件を指定して、グループ化(合計)した結果を出す方法がわかりません(>_<) たとえば、以下の2つのテーブルがあります。 テーブル:仕入先マスタ 仕入先ID|仕入先名|締日|支払区分|支払日| 0001|あいうえお|20|1|20| 0002|かきくけこ|99|2|99| 0003|さしすせそ|20|2|99| テーブル:仕入テーブル 仕入日|仕入先ID|商品名|仕入金額| 2010/02/10|0001|商品A|10,000| 2010/02/25|0001|商品B|20,000| 2010/02/20|0002|商品C|30,000| 2010/02/25|0002|商品D|40,000| 2010/03/10|0002|商品E|50,000| 2010/03/15|0002|商品F|60,000| 2010/02/12|0003|商品G|70,000| 2010/02/19|0003|商品H|80,000| 2010/03/12|0003|商品I|90,000| 上記から抽出条件として 条件1  仕入テーブルの仕入日:2010/02/01~2010/02/28  仕入先マスタの締日:20 結果1  仕入先ID|仕入先名|仕入金額合計|  0001|あいうえお|30,000|  0003|さしすせそ|160,000| 条件2  仕入テーブルの仕入日:2010/03/01~2010/03/31  仕入先マスタの締日:99 結果2  仕入先ID|仕入先名|仕入金額合計|  0002|かきくけこ|110,000| という結果が出したいのですが、どのようなSELECT文を書けばいいのでしょうか? 非常に汚い書き方で見にくく申し訳ありませんが、お詳しい方、是非ともご教授のほどお願いしますm(__)m

    • ベストアンサー
    • MySQL
  • SQLについての質問

    教えてください!! テーブルAに商品の売上情報(JANコード、売上金額、売上日)、テーブルBに商品マスタ情報(JANコード、更新日付、仕入区分、・・・)があります。欲しい情報は「仕入区分=1を満たす特定期間のJANコード別の売上金額合計」です。更新日付は他の商品マスタ情報を変更する都度付与される日付ですが、仕入区分はどの更新日付でも同じJANコードなら同じ値です。従って、単純に「仕入区分=1のJANコードの売上をSUM」で指定すると、重複行が発生し、正確な売上が出ません。例えば「同一JANコードなら最新の更新日付の仕入区分のみ見る」といった条件を加えるにはどのようにすればよいのでしょうか? 具体的なSQL文で教えてもらえると有り難いです。

  • Accessのテーブル結合方法

    Access2000で商品の仕入と売上の受払を一覧表にしようとしているのですがうまくいきません。 テーブルは商品仕入と、売上の2つがあって 仕入には荷受した日、商品コード、数量、仕入金額と値入金額、仕入先があります。 売上には売上した日、商品コード、レジ番号、利用者、数量、売上金額となっています。 この2つを1枚の表にして、商品コード別に在庫が動いた日、適用(売上ならレジ番号、利用者を表記して、仕入なら仕入先を明記)、仕入数量、仕入金額、値入金額、売上数量、売上金額となるようにしたいのですが、うまくいきません。 ユニオンクエリを使ったり、選択クエリで単純にならべたりしたのですが、私の知識ではどうにもならなくなりました。 よろしくご指導のほどお願いします。

  • SQLストアド INSERTの質問です

    仕入データから、最後に仕入した商品毎の単価をテーブルにINSERTしたい 仕入日  商品コード   単価  数量  金額 5/1      001      150    1   150 5/2      002      160    1   160 5/3      001      145    1   145 5/4      001      146    1   146 5/20     002      170   1    170 上記のような仕入データから商品コード単位の最終@の テーブルを作成したと思います 商品コード   最終仕入@ 001        146 002        170 宜しくお願い致します

  • 列名無効について

    お世話になります。 下記のSQLを実行すると列名無効になってしまいます。 なにが悪いのかまったくわからないので アドバイスをお願いします。 最終行の当月一括仮消売上でエラーになっています。 --当月一括仮消売 select t1.取引先コード, (sum(NVL(ukm.売上検収金額,0))) * -1 AS 当月一括仮消売上 from T_ZZ売上検収 uk, T_ZZ売上検収明細 ukm, (select max(t.取引先コード) as 取引先コード, t.部門番号 from (SELECT b.部門番号 FROM M_ZZ部門 b WHERE not exists(SELECT b.部門番号 FROM M_ZZ部門グループ g,M_ZZ部門グループ明細 gm Where g.部門グループ番号 = gm.部門グループ番号 AND gm.部門番号 = b.部門番号 AND g.部門グループ番号 = 67) AND b.削除フラグ = '0') b, (SELECT t.取引先コード, t.部門番号 FROM M_ZZ取引先 t, M_ZZ部門 b where t.部門番号 = b.部門番号 and b.削除フラグ = '0') t group by t.取引先コード,t.部門番号) t1 where uk.売上検収SEQ = ukm.売上検収SEQ and uk.得意先コード = t1.取引先コード and uk.案件属性 = '0' and uk.元売上検収SEQ IS NULL and uk.承認区分 = '1' and uk.削除フラグ = '0' --開始日付 and uk.検収日 >= to_date('20040401 00:00:00','yyyy/mm/dd hh24:mi:ss') --終了日付 and uk.検収日 <= to_date('20040430 23:59:59','yyyy/mm/dd hh24:mi:ss') --仕入商品販売 and ukm.サービス分類コード != '07' group by t1.取引先コード,当月一括仮消売上 よろしくお願いします。

  • このぐるぐるSQLクエリまとまりますか?

    ピボット集計の理解が難しくて難儀してます このような予定表を作るのですが毎月ごとに集計してやるのに 4回問い合わせております。一回でえいやっと投げるにはどう記述しましょう? mysql 5.0です -- 今月 -- SELECT 商品番号,sum(受注金額) FROM 注文受付テーブル where DATE_FORMAT(納入日, '%Y%m') = DATE_FORMAT(NOW(), '%Y%m') group by 商品番号; -- 来月 -- SELECT 商品番号,sum(受注金額) FROM 注文受付テーブル where DATE_FORMAT(納入日, '%Y%m') = DATE_FORMAT(NOW()+ INTERVAL 1 MONTH, '%Y%m') group by 商品番号; -- 再来月 -- SELECT 商品番号,sum(受注金額) FROM 注文受付テーブル where DATE_FORMAT(納入日, '%Y%m') = DATE_FORMAT(NOW()+ INTERVAL 2 MONTH, '%Y%m') group by 商品番号; -- ささらい月 -- SELECT 商品番号,sum(受注金額) FROM 注文受付テーブル where DATE_FORMAT(納入日, '%Y%m') = DATE_FORMAT(NOW()+ INTERVAL 3 MONTH, '%Y%m') group by 商品番号;

  • Accessでのクエリ作成についてですが

    【Tジャンル】【T商品】【T仕入先】 ↑これらの3つのテーブルを使ってクエリを作成すると仮定します。 それぞれのテーブルにあるフィールドの内容は以下の通りです。 【Tジャンル】 [ジャンルコード(主キー)][ジャンル名] 【T商品】 [商品コード(主キー)][商品名][ジャンルコード] [仕入先コード][仕入原価][標準価格][終息][備考] 【T仕入先】 [仕入先コード(主キー)][仕入先名][フリガナ][郵便番号] [住所][建物名][電話番号][FAX番号][担当者名][メールアドレス] ここで質問があります。 クエリ作成のデザイングリッドのフィールドに [仕入先コード]を追加するとします。 [仕入先コード]は【T商品】と【T仕入先】両方にあるのですが、 フィールド名が同じならば、どちらから追加しても構わないものなのでしょうか? それとも、何か決まり事のようなものがあるのでしょうか? 基礎的な部分の質問ですが、ご存知の方がおられましたら、 どうか宜しくお願いします。

  • SQL Server複数テーブルの連結

    在庫管理を行う上で、3つのテーブルを結合したいと考えておりますが、うまく結合できません。 【テーブル抜粋】 ・販売  販売日  部門CD  店舗CD  商品CD  販売数 ・仕入  仕入日  部門CD  店舗CD  商品CD  仕入数 ・棚卸  棚卸日  部門CD  店舗CD  商品CD  実在庫 各テーブルから、日付で絞りこんで抽出は出来ていますが、上記を結合させる方法がわかりません。 ※各テーブルの商品数がバラバラです。 例えば、棚卸にはあるが、仕入も販売もない商品。 販売にはあるが、在庫も仕入もない商品N。 試した方法、在庫を基本に販売をLEFT OUTER JOINで結合し、仕入をLEFT OUTER JOINで結合しGROUP BYで集計 SELECT 部門CD,店舗CD,商品CD,ISNULL(実在庫,0) AS Z,ISNULL(販売数,0) AS B,ISNULL(仕入数,0) AS S FROM( SELECT 部門CD,店舗CD,商品CD,SUM(実在庫) FROM 棚卸 WHERE 棚卸日 BETWEEN (開始日) AND (終了日) ORDER BY 部門CD,店舗CD,商品CD )AS ZAI LEFT OUTER JOIN( SELECT 部門CD,店舗CD,商品CD,SUM(販売数) FROM 販売 WHERE 販売日 BETWEEN (開始日) AND (終了日) ORDER BY 部門CD,店舗CD,商品CD ) AS BAI ON ZAI.商品CD=BAI.商品CD LEFT OUTER JOIN( SELECT 部門CD,店舗CD,商品CD,SUM(仕入) FROM 仕入 WHERE 仕入日 BETWEEN (開始日) AND (終了日) ORDER BY 部門CD,店舗CD,商品CD ) AS SII ON ZAI.商品CD=SII.商品CD 上記の結果、結合はしたのですが、店舗間の商品数がバラバラとなりました。 例えば、aという店舗の販売数に、b販売数がはいっていたらり? ※結合する前の、クエリは正常に抽出しておりますので、結合方法が悪いと考えております。 もしかすると、テーブルの項目をそろえて、UNION ALLでつなげばと思ったのですが、コーディング方法がわからす・・・ 結合方法をアドバイス頂けたら幸いです。

  • SQL HAVING句?集約関数について

    SQL HAVING句?集約関数について 現在、SQLを書いているのですが、集約関数についてわからないことがあります。 下記のようなテーブルについて   品番    SEC   SUB 倉庫コード 日付 金額 0102A255-**** 100 001 412200 64 20100501 5700 0102A255-**** 100 001 412200 64 20091226 7980 0102A255-**** 100 001 412200 64 20091001 9400 品番をひとつに絞り、かつ最新日付とその金額をもってくるためにはどうしたらいいでしょうか? ようは一番上のレコードのみ抽出したいということです。 どなたかお願いします。