要求を満たすことのできるSQL文を教えてください

このQ&Aのポイント
  • 明細IDごとに金額を合計し、最大の金額の商品名を表示するSQL文を教えてください。
  • 現在、売上の明細を明細IDごとにグループ化し合計値を表示させるプログラムを開発中です。明細IDごとに金額を合計するのはできているが、最大の金額の商品名を表示する要件を満たすSQL文がわからない状況です。
  • 明細IDごとに金額を合計し、その明細IDの中で最大の金額の商品名を表示するSQL文を教えてください。
回答を見る
  • ベストアンサー

要求を満たすことのできるSQL文を教えてください

現在、売上の明細を明細IDごとにグループ化し合計値を表示させるプログラムを開発中です。 以下のような要件を満たすSQL文を教えてください。 【もともとの売上の明細のテーブル】 明細ID | NAME | KINGAKU 001  |商品A | 1000 001 |商品B | 500 001 |商品C | 300 002 |商品A | 1000 002 |商品D | 1500 【グループ化後のテーブル】 明細ID | NAME | KINGAKU 001 |商品A | 1800 002 |商品D | 2500 ・明細IDごとに金額を合計する。 ・NAMEの列については、その明細IDの中で最大の金額の商品名を入れる。 ※現在、明細IDごとに金額を合計するのはできているのですが、  もう1つの要件をどのようにすれば達成できるのか分からない  状況です。要件を満たすことのできるSQL文をぜひ教えてください。 よろしくお願いいたします。

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

  • ベストアンサー
回答No.1

select 明細ID, (select top 1 NAME from テーブル as b where A.明細ID=B.明細ID order by KINGAKU desc) as NAME, KINGAKU from (select 明細ID,sum(KINGAKU) as KINGAKU from テーブル group by 明細ID) as A とかで良いと思います。 他にも、色々とやり方はありますが。

tama1980
質問者

お礼

返信が遅くなり申し訳ございません。 回答ありがとうございました。 おかげさまで、うまくいきました。 今後ともどうぞよろしくお願いいたします。

関連するQ&A

  • 集計のSQL文を教えてください

    集計で困っています。 助けてください。 uriage_date(date型) uriage_kingaku 2005/01/01 00:15   2000 2005/01/01 12:20   2500 2005/01/02 00:00   1000 ←ここは前日分(2005/01/01)に 2005/01/02 05:15   1800 2005/01/04 12:30   2300 ~ 2005/12/31 20:20   5000 2005/12/31 22:45   1200 上の様なテーブルから 売上合計(1月分) uriage_date     goukei_kingaku 2005/01/01      5500 2005/01/02      1800 2005/01/03      0 ~ 2005/01/31      9000 この様に1日毎(当日00:01~翌日00:00)の売上の合計金額 を一ヶ月単位で集計したいのですが、SQL文が解りません。 00:00の売上は前日の合計に入れたいです。 データの無い日も0円として欲しいです。 よろしくおねがいします。

  • SQL文 グループ集計TOPに対する明細

    すみません、教えてください。 得意先の売上額上位10社のそれぞれについて、仕入合計額上位10商品のリストを出力するSQL 文をがわからなくて困っています。 できれば、一般的なSQL文(SQL92)でお願いします。 テーブルは、下記の2つです。 -------------------------------------------- ・t_売上明細  売上日  得意先コード  商品コード  売上金額 ・t_商品マスタ  商品コード  仕入単価 <出力>====================================== 得意先コード, 売上合計,商品コード,仕入額合計 -------------------------------------------- C3 \300100    A08 \32500     A04 \31000     ~~~    A10 \30000(Top10) C2 \200200    A05 \22500    A04 \21000     ~~~     A10 \20000(Top10) ~~~ ~~~ C10 \1000(Top10)    A97 \500    A14 \100    ~~~    A96 \10(Top10) ================================

  • SQL Server を使っています。SQLの質問です。

    SQL Server を使っています。SQLの質問です。 得意先テーブルと商品テーブルと売上明細テーブルがあります。 一つの商品に関して得意先ごとに最新の売上明細データの一覧を作成したいと考えて います。 ■売上明細データ 明細ID (meisai_id) 得意先ID (tokuisaki_id) 商品ID  (syohin_id) 売上金額(uriage_kingaku) 売上日 (uriage_date) ■売上明細データ(table_uri_maisai) meisai_id tokuisaki_id syohin_id uriage_kingaku uriage_date =================================================================   1     aaa     001     100     2010/01/01   2     aaa     002     200     2010/01/01   3     bbb     001     105     2010/01/02   4     bbb     002     205     2010/01/02   5     ccc     001     110     2010/01/03   6     ccc     002     210     2010/01/03   7     aaa     001     100     2010/01/04   8     aaa     002     200     2010/01/04   9     bbb     001     105     2010/01/05   10     bbb     002     205     2010/01/05   11     ccc     001     110     2010/01/06   12     ccc     002     210     2010/01/06 上のような明細があり、「syohin_id」が「001」のデータに関して、 得意先ごとの最新のデータだけを抽出したいと考えています。 この場合ですと、以下の3件のデータが抽出できればよいわけです。   7     aaa     001     100     2010/01/04   9     bbb     001     105     2010/01/05   11     ccc     001     110     2010/01/06 tokuisaki_id と syohin_id の2つを特定して1件のデータを抽出するには 以下のSQLで実現できましたが、syohin_id だけを指定して複数のデータを 出すことがどうしてもできません。 SELECT * FROM table_uri_meisai WHERE uriage_date = (select max(uriage_date) FROM table_uri_meisai WHERE tokuisaki_id = 1 AND syohin_id = 1) AND tokuisaki_id = 1 AND syohin_id = 1 どなたかご指導ください。 よろしくお願いします。

  • SQL文 2つのテーブルから、グループごとの合計を求める

    テーブル名:グループ表 ID   グループ名 ------------------------- 100   Aグループ 101   Bグループ 102   Cグループ 103   Dグループ 104   Eグループ テーブル名:売上表 ID   売上年月日   売上額 ------------------------------ 101   20090401   1000 101   20090501   2000 102   20090401   2500 102   20090503   1500 103   20090404   3000 103   20090506   4000 上記の2つのテーブルがあります。 グループごとの売上合計一覧を出します。 ■求めたいSELECT文結果 グループ名   合計(売上額) ---------------------- Aグループ    0 Bグループ   3000 Cグループ   4000 Dグループ   7000 Eグループ    0 select グループ名,sum(売上額)  from (select グループ名,売上額     from グループ表,売上表      where グループ表.ID = 売上表.ID)   group by グループ名 では、 グループ名   合計(売上額) ---------------------- Bグループ   3000 Cグループ   4000 Dグループ   7000 となってしまい、うまくいきません・・・ どうように書いたらよろしいでしょうか?

  • SQLについて質問します

    VB2010 とSQL Server2008 R2 で開発をしています。 担当者テーブル(table_tanto)と売上明細テーブル(table_uriage_meisai)があります。 各テーブルのカラムは以下です。 table_tanto ・tanto_id ・tanto_name table_uriage_meisai ・meisai_id ・tanto_id ・kingaku ・date ある期間の担当者別の売上実績を一覧で出力したいと考えています。 「table_uriage_meisai」の「date」で範囲指定したいと思います。 結果はこんな形を望んでいます。 担当者ID 担当者名 売上合計 0001   ○○○   ****** 0002   □□□      0 0003   △△△   ****** 0004   ●●●   ****** 2点質問があります。 売上の無かった担当者も含めてすべての担当者の一覧を出したいと考えています。 そのSQlがわからないのと、売上がなかった担当者はその列がNullになってしまうと思うんですが、後の計算で困ります。 Nullのときゼロを返すようにするにはどうしたらよいでしょうか。 以上2点について教えて下さい。 よろしくお願いします。

  • SQL文を教えてください

    以下のようなテーブルがあります。 IDとnameは複合ユニークキーとなっています。 ID | name 1 | foo 2 | foo 1 | bar 3 | foo 2 | hoge 3 | bar このテーブルから、nameにfooとbar両方を持つIDを抜き出すSQL文が分からずに困っています。 つまり、fooとbarで検索するとID 1とID 3が、fooとhogeで検索するとID 2がヒットするようなSQL文を知りたいのです。 初歩的な質問なのかもしれませんが、どうしてもSQL文が思いつかず大変困っています。 どうぞよろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQLを教えて下さい

    SQL server 2008 R2 と VB2010 で開発を行っています。 いま、月別の合計金額を計算するSQLがわからなくて困っています。 【売上明細テーブル】 ・明細ID ・年月日 ・得意先ID ・売上金額 出力したい内容は以下のような月別売上合計の推移です。 具体的にはこんな感じです。 得意先ID 3月売上 4月売上 5月売上 --------------------------------------- 0001     1,111   2,222   3,333 0002     2,222   3,333   4,444 0003     5,555     0    6,666 得意先の中には売上の無い月もあります(0003の4月)が、 この場合も一覧に出したいと考えています。 1つのロウの中に異なる条件の値がある場合のSQLの組み立てがわかりません。 どうぞ宜しくお願いします。

  • SQLの書き方(UPDATE文)

    SQLの書き方の質問です。 売上Tと商品Mというテーブルがあったとして、 売上Tには商品コード、数量、金額という項目が 商品Mには商品コード、単価という項目が それぞれあったとします。 売上Tの金額=売上T.数量×商品M.単価 この売上Tの金額を更新するのに、update文でできるだけシンプルに高速に動くSQL文を作成したいのですが、どのような書き方がよいと思いますか? 件数は例えば売上が100万件、商品が10万件あった場合を想定して。 以上よろしくお願いいたします。

  • SQL GROUPで件数の一番多いレコードのみ取る

    SQL GROUPで件数の一番多いレコードのみ取る ORACLE10です。 次のようなテーブルがあります。 USER -----------テーブル名 ID,NAME,DATA----列名 1,A,any 1,A,any 1,B,any 2,C,any 3,D,any このテーブルから、IDをGROUPにして、さらに、一番使用頻度の多いNAMEを取得したいのです。 表示したいのは、IDとNAMEです。 つまり、取得結果例は次のようになります。 取得結果例 ID,NAME----列名 1,A 2,C 3,D SQL文をどのように作れば可能でしょうか? ちなみに、IDやNAMEのマスタテーブルはありません。 自分では、「(select ID, NAME, count(*) from USER group by ID, NAME) COUNT」で、COUNTを内部テーブルにして、グループ内で一番多いcount(*)をmaxで取得してみようかと思ったんですが、そこからアイデアが出ませんでした。

  • 1つのSQLで2段階の抽出を行いたい

    恐らくそれほど複雑なSQLではないと思いますが、中々SQLが作成できず困っています。 回答いただければ嬉しいです。 以下のテーブルがあったと仮定します。 テーブル名:  売上げ明細 カラム:  ・商品ID … 売上げ明細なので一意ではありません  ・単価 … 同じ商品IDでも、レコードによって単価は異なります  ・数量 … 1~5の整数のみとします 実際のデータは以下の通りです。 商品ID,単価,数量 1001,50,2 1001,60,5 1002,90,3 1003,60,5 1003,80,4 1003,90,1 1004,60,3 上記データを以下の通り抽出するには、どのようなSQLを組めばいいでしょうか? 1.まず各商品IDの中から単価が最大のレコードだけを取り出す 商品ID,単価,数量 1001,60,5 1002,90,3 1003,90,1 1004,60,3 2.次に数量でgroup by して、件数をカウントする 数量,件数 1,1 3,2 5,1 1つのSQL文で2の結果が得られれば、途中の抽出条件は特に問いません。 ちなみにMySQL5を使っています。 よろしくお願いします。

    • ベストアンサー
    • MySQL