SQL構文について教えてください

このQ&Aのポイント
  • アクセスSQL構文について教えてください。わからないので、教えてください。
  • やりたいことは、番号ごとに売上と返品のデータを集計する方法です。
  • group byでは実現できないため、他の方法を探しています。
回答を見る
  • ベストアンサー

アクセスSQL構文について教えてください。

わからないので、教えてください。 やりたいことは、下記のような構造のテーブルのデータを↓ 番号1 売上 500 番号1 返品 -120 番号1 売上 600 番号2 売上 500 番号2 返品 -400 このように作り変えたいというものです。↓ 番号1 1100(売上のSUM) -120(返品のSUM) 番号2 500 -400 のようなデータに作り変えたいということです。 group by では、ダメだし・・、番号は何番まであるかきまっていません。(便宜上”番号1”としていますが、本当はアルファベットの羅列です) どなたかわかる方が居たら教えていただきたいです。 どうぞよろしくお願いします。

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

  • ベストアンサー
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.1

下記のようにすればよいと思います。 テーブル名:T フィールド名:F1,F2,F3 --- SELECT T.F1, SUM(switch(T.F2='売上',T.F3,True,0)) AS 売上合計, SUM(switch(T.F2='返品',T.F3,True,0)) AS 返品合計 FROM T GROUP BY T.F1;

chelny
質問者

お礼

switchですね! なるほどです。 教えていただいたやり方でうまくいきました! ありがとうございました。

関連するQ&A

  • 売り上げ集計SQLが作れません

    1つのTABLEに、1日の売上げ高を商品ごとに登録していくDBがあります。 簡単な構造は以下のとおりです。 日付       |A品売上額  |B品売上額 | 2008/11/01 |500000    |600000   | 2008/11/02 |450000    |800000   | 2008/11/03 |100000    |700000   | ・・・ 2008/11/30 |200000    |500000   | 2008/12/01 |300000    |100000   | <質問> それぞれの商品の1ヶ月売上高をSQLで抽出したいと思うのですが、Group byで何を指定したらいけるのかわからず困っています。 SQLで計算せずに抽出だけ行って、CGI側で計算するしかないのでしょうか? アドバイスお願いいたします。 <最初に考えたSQL(Group byがないためエラーになりました)> select sum(a),sum(b) from uriage where date between '2008/11/01' AND '2008/11/30';

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

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

  • SQL文を教えてください。

    MYSQLを使っています。 【売上テーブル】 || 日付 || 金額 || ----------------- || 2011/01/01 || 100 || || 2011/01/01 || 200 || || 2011/01/02 || 600 ||           ・           ・           ・ || 2012/12/31 || 500 || || 2012/12/31 || 100 || SELECT SUM(金額) FROM 売上テーブル WHERE 日付 BETWEEN '2011-01-01' AND '2011-12-31' GROUP BY DATE_FORMAT(日付, '%Y/%m') で月初から月末のデータを表示させることはできますが、 2011/01/10~2011/02/09を一か月として 以降は 2011/02/10~2011/03/09 2011/03/10~2011/04/09        ・        ・        ・ 2011/12/10~2012/01/09 といった感じに1年間のデータを表示させる方法がわかりません。 どうぞ宜しくお願いします。

    • ベストアンサー
    • MySQL
  • このぐるぐる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について

    現在、Access2000を使っています。 初心者で勉強しながら、作っているのですが、どうしても 分からない部分があるので、どなたか教えて下さい。 毎日2回、あるデータを取っています。テーブルAには、 [記録日][aデータ][bデータ] で作ってあります。このテーブルのデータから、グラフを作りたく、 ウィザードを使って作り完成しました。 しかし、同じテーブル構造で、もう一つテーブルBがあります。 (後々、このテーブルがもう少し増えそうです) このテーブルを使って同じようにグラフを作りたく、同じように ウィザードから作ればよいのですが、後々のメンテなどを考えると、 同じ修正を複数作り直すのでは大変なので、モジュールの中で ケース文で分けようと思います。 グラフのプロパティを見ると、 「値集合ソース」に SELECT (Format([記録日],"DDDDD")) AS 式1, Sum([aデータ]) AS aデータの合計, Sum([bデータ]) AS bデータの合計 FROM テーブルA GROUP BY (Format([記録日],"DDDDD")), (Int([記録日])); となってたので、モジュールの中で、 Me.グラフ名.RowSource = "SELECT (Format([記録日],""DDDDD""")) AS 式1, Sum([aデータ]) AS aデータの合計, Sum([bデータ]) AS bデータの合計 FROM テーブルA GROUP BY (Format([記録日],""DDDDD"")), (Int([記録日]));" と書いたのですが、実行するとここで下記のようなエラーになってしまいます。 「指定した式に、RowSourceプロパティに対する不正な参照が含まれます。」 モジュールからは「値集合ソース」(RowSource) にはセット できないのでしょうか? 詳しい方、どうか回答をお願い致します。

  • ACCESS2000でSQLのループがうまくいかない

    ACCESS2000のVBAを使ってプログラムを組んでおります。 テーブル・クエリの構成等は以下のようになることが目的です。 【テーブルA】:全国営業所住所情報         1.新住所コード(数値)         2.都道府県名(テキスト)         3.漢字市区町村名(テキスト)         4.営業所が管轄している代理店名(テキスト):列名「代理店名」   【テーブルB】:営業所設立情報          1.新住所コード(数値)         2.都道府県名(テキスト)         3.漢字市区町村名(テキスト)         4.営業所設立年月(テキスト)         【テーブルC】:各営業所売上情報         1.新住所コード(数値)         2.営業所番号(テキスト)         3.商品の売上個数(数値) 【テーブルD】:メンテ用~上記、ABCを使ったクエリをVBAで作成するときにプログラムの中で参照するテーブル。         1都道府県名(テキスト)         2都道府県名グループ番号(テキスト):列名は「式1」でグループ番号は1から9まで         3各営業所名(テキスト) *テーブルの関係は  テーブルA:テーブルB:テーブルC=1:1:n。  各テーブルには「新住所コード」という共通のKEYを持っており、下記のようなリレーションシップがあります。   ●Aテーブル→Bテーブル→Cテーブル              →C'テーブル              →C''テーブル            (→は「LEFT JOIN」の意) ループは、BテーブルとCテーブル(複数)のリレーションを組むところに使っておるのですが、 きちんとプログラムが動いてくれずに悩んでおります。 どのようなプログラムを組んだほうがいいでしょうか? (私が組んだプログラムは追記させて頂きます。)

  • 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分

    SQL分でわからないことがあるので質問させてください。 Aというテーブルに、 番号と処理通番(ユニーク)の2つカラムがあります。 Aテーブルから重複した番号とその処理通番を 上から4件まで取得したいのですが、 ----------------------------- SELECT A.番号,A.処理通番 FROM A INNER JOIN (SELECT 番号 FROM A GROUP BY 番号 HAVING COUNT(*) > 1) AS B ON (A.番号 = B.番号) ORDER BY A.番号,A.処理通番 ----------------------------- のSQLでは重複した番号のデータを 全て取得してしまいます。 番号別に4件まで取得したいのですが、 どのようなSQLを書けば取得できますか? よろしくお願いします。

  • access 1対1と1対多のテーブルをクエリで集計したい…

    受注管理のデータベースを作っています。 売り上げを計算するクエリを作ったのですがどうもうまくいかないので質問します。 集計したいテーブルですが 受注マスタテーブル 注文番号(主キー テキスト型) 注文日(日付型) 氏名 : : 受注明細マスタテーブル 注文番号 (重複あり)受注マスタの注文番号と1対多のリレーションシップ 商品名 品番 販売単価 購入個数 経費・返品金額テーブル 注文番号(主キー)受注マスタの注文番号と1対1のリレーションシップ 経費 返品金額 これを、販売単価×購入個数-経費+返品金額というようにして1ヵ月ごとに集計しようとして、下のようなクエリを作ったのですが経費が何回も計算されてうまくいきませんでした… よろしくお願いします。 SELECT Format(注文者マスタ!注文日,"yyyy/mm") AS 月, Sum([受注明細マスタ]![販売単価]*[受注明細マスタ]![購入数量]-[経費・返品金額テーブル]![経費]+[経費・返品金額テーブル]![返品金額]) AS 売上 FROM (注文者マスタ RIGHT JOIN 経費・返品金額テーブル ON 注文者マスタ.注文番号 = 経費・返品金額テーブル.注文番号) LEFT JOIN 受注明細マスタ ON 注文者マスタ.注文番号 = 受注明細マスタ.注文番号 GROUP BY Format(注文者マスタ!注文日,"yyyy/mm");

  • 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

専門家に質問してみよう