SQLでブランドコードがNullの金額を集計する方法を教えてください

このQ&Aのポイント
  • SQLでブランドコードがNullの金額をブランドコードが'01'の金額に日付をキーにして集計する方法を教えてください。
  • どのようなテーブルでも、ブランドコードがNullの金額をブランドコードが'01'の金額に日付をキーにして集計する方法を教えてください。
  • SQLにおいて、ブランドコードがNullの金額をブランドコードが'01'の金額に日付をキーにして集計する方法を教えてください。
回答を見る
  • ベストアンサー

SQLで集計について分からないことがあります。

SQLで集計について分からないことがあります。 まず、次のようなテーブルがあったとして 日付  店舗コード ブランドコード 金額 ---------------------------------------- 09-01 | 401101 | 01 | 10000 09-02 | 401101 | 01 | 20000 09-03 | 401101 | 01 | 30000 09-04 | 401101 | 01 | 40000 09-01 | 401101 | 02 | 10000 09-02 | 401101 | 02 | 20000 09-03 | 401101 | 02 | 30000 09-04 | 401101 | 02 | 40000 09-01 | 401101 | | 11111 09-02 | 401101 | | 22222 09-03 | 401101 | | 33333 09-04 | 401101 | | 44444 ブランドコードが'Null'の金額をブランドコードが'01'の金額に 日付をキーにして集計したいんですが、 可能でしょうか? なにか、良い方法があればお願いします。

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

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

  • ベストアンサー
  • webuser
  • ベストアンサー率33% (372/1120)
回答No.1

Nullを01と同等とみなして、Nullを01以外も含めて日付とブランドコードをキーに集計したいのですか? それとも、Nullを01のみを対象とし、日付をキーに集計したいのですか? いずれにしても、確定しているのは、 group byに日付 sumは金額 です。 後者の場合、条件としては ブランドコード IsNull or ブランドコード = '01' まとめると、 select 日付 ,sum(金額) from tbl where ブランドコード IsNull or ブランドコード = '01' group by 日付 前者の場合は少しやっかいです。 tblの部分にselect句を書く事ができるタイプなら、一旦加工した状態を再selectしてやる事で実現できます。 select tmp.日付 ,tmp.ブランドコードX ,sum(tmp.金額) from ( select 日付 ,店舗コード ,ブランドコード ,金額 ,(if ブランドコード IsNull then '01' else ブランドコード) as ブランドコードX from tbl ) tmp group by tmp.日付 ,tmp.ブランドコードX ※ifの部分など、細かい構文はSqlに合わせて下さい。 ※fromにselect句を書く事ができないタイプの場合、また違った書き方になります。

その他の回答 (1)

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

nvl関数を使ってもいいと思います。 select  日付, nvl(ブランドコード,'01') ブランドコード, sum(金額) 合計金額 from  t1 group by  日付, nvl(ブランドコード,'01')

関連するQ&A

  • SQL 集計について

    集計方法がどうしてもわからないのでご教授ください。 下記のテーブルを持っています。 テーブル1では日々の売上金額を管理し、 テーブル2では一週間の日付が保存されています。(月曜日~日曜日) -------テーブル1-------           日付    売上金額   2013/09/01     3000   2013/09/02     4000   2013/09/03     2000    ・              ・           ・           2013/09/30     1000 ----------------------- --------テーブル2---------  日付(月)    日付(日)    2013/08/26   2013/09/01 2013/09/02   2013/09/08    ・        ・    ・       2013/09/30   2013/10/06 ------------------------- テーブル1とテーブル2の情報をもとに テーブル3にある、日付(月)と日付(日)は、テーブル2から持ってきて、 一週間の集計を行いたいと思っております。 --------------テーブル3--------------  日付(月)    日付(日)    売上金額 2013/08/26  2013/09/01     3000 2013/09/02  2013/09/08     6000   ・   ・   ・ 2013/09/30  2013/10/06     1000 ------------------------------------ このようにするにはどのようなSQLを組めばいいのでしょうか? SQL初心者のため、難しい単語などを使わずに ご説明をしていただければと思います。 どうぞ、よろしくお願いいたします。

  • 集計のSQLについて

    皆さんの知恵をお借りしたいと思っています。 どなたか、良い案がある方お願いいたします。 以下のテーブルがあります。 (売上テーブル) 品名   金額   購入者 ---------------------------- 鉛筆   20    Aさん 鉛筆   40    Bさん 鉛筆   30    Bさん 鉛筆   30        鉛筆   10        上のテーブルで、品名・購入者を集計キーとして、 金額を集計したい場合、 SELECT 品名,購入者,SUM(金額) FROM 売上テーブル GROUP BY 品名,購入者  というSQL文で,   品名   金額   購入者 ---------------------------- 鉛筆   20    Aさん 鉛筆   70    Bさん 鉛筆   40        という結果が得られると思いますが・・・、 これを、 品名   金額   購入者 ---------------------------- 鉛筆   20    Aさん 鉛筆   70    Bさん 鉛筆   30        鉛筆   10        という結果になるようなSQL文を作りたいのです。 購入者が入っているものについては、品名・購入者で集計して、 購入者が空欄のものは集計しないようにしたいと思っています。 UNIONを使えばできるとは思うのですが、 それ以外の方法で、1回のSQL文でできる方法があれば知りたいと思っています。 よろしくお願いします。

  • レコード集計のSQLについて

    お世話になります。 SQL Serverに関する質問です。 以下の内容を満たすSQLを作成したいのですが、 方法がわからず困っています。 (内容) *************************************************************** ・Aテーブル、Bテーブルには、以下のレコードが格納されています。 [Aテーブル] | key_code | code1 | code2 | code3 | money | person | ← カラム名 ---------------------------------------------- | 001 | 1 | 1 | 1 | 1000 | 10 | ---------------------------------------------- | 001 | 1 | 2 | 1 | 3000 | 10 | ---------------------------------------------- | 001 | 1 | 1 | 1 | 1000 | 10 | ---------------------------------------------- [Bテーブル] | key_code | cd1 | cd2 | cd3 | cd4 | cd5 | ・・・・・ | cd10 | ← カラム名 ------------------------------------------------------------ | 001 | 01 | 02 | 10 | 30 | 51 | ・・・・・ | 90 | ------------------------------------------------------------ | 002 | 01 | 02 | 03 | 10 | 40 | ・・・・・ | 55 | ------------------------------------------------------------ ・Aテーブルの key_code とBテーブルの key_code を関連付けて、  Bテーブルのcd1~cd10に格納されている各コード単位に集計した  Aテーブルのmoney及びpersonの値を取得したい。  例えば、 key_code = '000' でAテーブルとBテーブルを関連付けして、 Bテーブルのcd(1~10) = '10' で集計した Aテーブルの money と personの 値を求めたい。 **************************************************************** 初歩的な質問で申し訳ございませんが、 どなたかご教授願えませんでしょうか? よろしくお願いいたします。

  • SQLの集計について教えてください。

    環境はoracle9iです。 ■テーブルの構成 |年度|月|部署コード|商品コード|金額| ■テーブルの内容 |2010|01|AAA|001|1000| |2010|02|AAA|001|2000| |2010|01|AAA|001|3000| |2010|01|AAA|002|3000| |2010|02|BBB|003|4000| |2010|01|CCC|001|5000| |2010|03|CCC|001|6000| 上記のようなテーブルがあり、 これを年度,月,部署コード,商品コードでサマリした値を表示したいです。 と、ここまでなら上の4つでGROUP BYしてあげれば良いのですが、 そこに年度,部署コード,商品コードでサマリした 「累計金額」列を加える必要があります。(イメージは下記のとおりです。) ■抽出結果の構成 |年度|月|部署コード|商品コード|金額|累計金額| ■抽出結果の内容 |2010|01|AAA|001|4000|6000| |2010|02|AAA|001|2000|6000| |2010|02|BBB|003|4000|4000| |2010|01|CCC|001|5000|11000| |2010|03|CCC|001|6000|11000| GROUP BYと別の集計単位で列を作ることが可能か、 可能であればどのようなSQLを書くべきか、 というところを教えてください。

  • SQLでの集計について

    こんにちわ。以下のようなテーブルから条件に見合う合計を出したいと思いSQLを書いてみたのですが、 思った結果になりません。 テーブルA ID1 得意先Cd 営業所Cd 日付 1  001    001  2005/09/01 2  001    002  2005/09/01 3  001    001  2005/09/03 テーブルB ID2 ID1 部署 数量 金額 1  1  01  1  1000 2  1  01  1  1000 3  1  02  1  1000 4  2  01  1  1000 5  2  01  1  1000 6  3  01  1  1000 7  3  01  1  1000 8  3  02  1  1000 [抽出結果] 得意先Cd 営業所Cd 日付  部署 数量(Sum) 金額(Sum) 001    001  2005/09/01 01   2   2000 001    001  2005/09/01 02   1   1000 001    001  2005/09/03 01   2   2000 001    001  2005/09/03 02   1   1000 001    002  2005/09/01 01   2   2000 [SQL] select 得意先Cd,営業所Cd,日付,部署,SUM(数量) As '数量計',SUM(金額) As '金額計' from テーブルA AA Inner join テーブルB BB ON (AA.ID1 = BB.ID1) group by 得意先Cd,営業所Cd,日付,部署,数量,金額 order by 得意先Cd,営業所Cd,日付,部署 このSQLを実行すると、日付、部署共に同じ場合でも数量・金額が合計値となりません。 得意先Cd 営業所Cd 日付  部署 数量 金額 001    001  2005/09/01 01 1  1000 001    001  2005/09/01 01 1  1000 どのように変更を加えれば、上記の「抽出結果」にできるのでしょうか? よろしくお願いいたします。

  • SQLについての質問

    9iです。お世話になります。 次のSQLをどう書けばよいのか分かりませんのでご教示願います。 【テーブルA】 id code 1 1 2 2 3 (null) … 【マスタテーブルB】 code name 1   あ 2   い 【ほしい結果】 id name 1  あ 2  い 3 (null) … 要するにcodeがnullの所はnameをnullにして、nullでないところは、マスタから引っ張ってくるということがやりたいです。 宜しくお願いします。

  • 集計のSQLをお教え下さい

    初心者ですよろしくお願いします。 以下の様なテーブルがあり、年月と場所コードで 件数を出したいと考えております。 申し訳ありませんが、SQLの記述をお教え下さい。 年月日 | 場所コード |  20060510   1000 20060511   1000 20060511   2000 20060512   2000 20060601   1000 20060601   2000   ・    ・    ↓ 年月日 | 場所コード | count 200605   1000      2 200605   2000      2 200606   1000      1 200606   2000      1 年月日を年月にして集計したいと考えています。 select 年月日,場所コード,count(*) from table group by substring(年月日 from 1 for 6) ではうまくいきませんでした・・・ よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQLでグルーピングしてやや複雑な集計する方法

    SQLでグルーピングしてやや複雑な集計する方法 こういうことってやりたい時あるよなーと思いつつ いい方法が思い浮かばないので質問させてください。 日付ごとにタイプなどの条件により集計して、 1行で1日分のデータを並べて出力したいと思っています。 とりあえずイメージを提示します。 テーブルイメージ -------------------------- 日付     額 タイプ 20090101  5000  1 20090101  1000  1 20090101  3000  2 20090101  2000  2 20090101  -200  4 20090101  3000  4 20090101  2000  4 20090102  1000  1 20090102  1000  2 20090102  1000  2 20090102  -100  4 20090102  4000  4 20090102  3000  4 -------------------------- 出力イメージ ----------------------------------------------------- 日付   タイプ1 タイプ2 タイプ4(正) タイプ4(負) 20090101   6000   5000   5000   -200 20090102   2000   2000   7000   -100 ----------------------------------------------------- 複問い合わせを駆使すればできるような気もするのですが、 日付で集計しなければならないところが難しく感じています。 合計が0(というか対象データが無い場合)の部分は空白でもかまいません。 データベースはOracleですがOracleだけでしか使えない特殊な機能ではなく 普通のSQLの組み合わせで解決したいと思っています。 (でもOracle固有の機能で解決できるのならそれも教えていただきたいです) 基本的に1発のSQLで表形式で帰ってくるSQLの書き方をお願いします。 できれば、SQLそのものを記述していただきたいです。 何回かSQLを発行してあとでエクセルで…とか、他のPG言語でなんとかする という方法は今回はいりません。 よろしくお願いします。

  • 集計をしたい

    SQLで集計をしたいです。 SQLを始めたばかりの者です。 下記、よろしくお願いします。 説明不足がありましたら、ご指摘をお願いします。 MS-SQLServer2005環境です。 下記の売上テーブルが存在します。 テーブル:UriageTBL 年月日 受注番号 商品コード 商品名 個数  単価  金額 20101001 100   300     リンゴ   1   100   100 20101001 110   400     バナナ   1   150   150 20101001 110   400     バナナ  -1   150  -150 20101001 120   500     キャベツ  1   120   120 20101002 130   500     キャベツ  1   120   120 20101002 140   600     レタス   1   110   110 20101002 140   600     レタス   1   110   110 20101002 150   400     バナナ   1   150   150 ----------------------------- 商品コードに対応する商品グループ(テーブルは存在しません) 商品コード 商品グループ 300     果物 400     果物 500     野菜 600     野菜 ---------------------------- 【結果】 年月日 商品グループ 受注件数 個数合計 金額合計 2010/10/01 果物       1     1     100 2010/01/01 野菜       1     1     100 2010/10/02 果物       1     1     150 2010/10/02 野菜       2     3     340 売上テーブル(UriageTBL)を、年月日別、商品グループ別に集計し、受注件数、個数合計、金額合計を取得したいです。 また、商品コードに商品グループテーブルが存在しない為、SQL内で設定します。 ただし、受注合計金額が0円の時は集計から外します。(受注番号110は集計から外します。) (受注件数は、受注番号の件数です。) 上記の場合、どのようなSQLの組み方をすればよいのか見当もつかず悩んでおります。 どなたかご教授頂ける方がいらっしゃいましたら、よろしくお願い致します。

  • SQL文で2つのSELCT文の結果を繋げる方法

    SQL文で2つのSELCT文の結果を繋げる方法はありますでしょうか。 Left Join でもと思ったのですが、片側にしかないのも、1レコードとして出力したいです。 テーブルの例と出力の理想は以下です。 また、上記の応用でこれを4テーブル(SELECT文)を繋げて、下記例で言うと、日付と商品コードがキーで、どのテーブルに存在しても、結果を1行で返せるでしょうか。 【テーブル1(SELECT文1)】 F_仕入 伝票日付 商品コード 仕入金額 2014/07/01 101     10,000 2014/07/02 102     15,000 2014/07/05 104 20,000 【テーブル2(SELECT文2)】 F_売上 伝票日付 商品コード 売上金額 2014/07/01 101     15,000 2014/07/02 102     25,000 2014/07/03 103 13,000 上記2つのSELECT結果 伝票日付  商品コード 仕入金額 売上金額 2014/07/01 101 10,000 15,000 2014/07/02 102 15000 25,000 2014/07/03 103 13,000 2014/07/05 104 20,000 よろしくお願いします。