
SQL抽出方法に悩んでいます④
度々で恐縮ですが、質問させてください。
(TABLE1)
営業所,顧客番号,代表顧客番号,氏名,売上日,売上区分,販売数量,販売金額(税込),消費税
1000,900001,900001,田中太郎,20180801,1,0,0,0 ①
1000,000001,900001,田中太郎,20180801,1,1,1080,80 ②
1000,000002,900001,田中太郎,20180801,1,2,2160,160 ③
1000,000002,900001,田中太郎,20180801,2,-1,-540,-40 ④
1000,000003,000000,佐藤三郎,20180730,1,4,3240,240 ⑤
1000,000003,000000,佐藤三郎,20180802,1,1,540,40 ⑥
2000,000001,000000,村井四郎,20180803,1,5,4320,320 ⑦
2000,000001,000000,村井四郎,20180803,2,-2,-324,-24 ⑧
(TABLE2)
営業所,顧客番号,代表顧客番号,氏名,売上日,売上区分,販売数量,販売金額(税込),消費税
1000,900001,900001,田中太郎,20180801,1,2,2700,200 計算結果は②③④の合算を①の代表顧客へ反映
1000,000003,000000,佐藤三郎,20180730,1,4,3240,240 計算結果は⑤のみ
1000,000003,000000,佐藤三郎,20180802,1,1,540,40 計算結果は⑥のみ
2000,000001,000000,村井四郎,20180803,1,3,3996,296 計算結果は⑦⑧の合算
TABLE1には商品売上金額データが入っており、
TABLE2に記載している方法にて結果を求めたいと考えていますが、
どのように構築したら良いのでしょうか。

No.3ベストアンサー
- 回答日時:
INSERT INTO TABLE2(営業所,顧客番号,代表顧客番号,氏名,売上日,売上区分,販売数量,"販売金額(税込)",消費税)
SELECT 営業所
, CASE 代表顧客番号 WHEN '000000' THEN 顧客番号 ELSE 代表顧客番号 END AS 顧客番号
, 代表顧客番号
, 氏名
, 売上日
, CASE WHEN SUM(CASE 売上区分 WHEN '1' THEN 販売数量 WHEN '2' THEN -販売数量 END) < 0 THEN MAX(売上区分) ELSE MIN(売上区分) END AS 売上区分
, SUM(CASE 売上区分 WHEN '1' THEN 販売数量 WHEN '2' THEN -販売数量 END) AS 販売数量
, SUM(CASE 売上区分 WHEN '1' THEN "販売金額(税込)" WHEN '2' THEN -"販売金額(税込)" END) AS "販売金額(税込)"
, SUM(CASE 売上区分 WHEN '1' THEN 消費税 WHEN '2' THEN -消費税 END) AS 消費税
FROM TABLE1
GROUP BY 営業所
, CASE 代表顧客番号 WHEN '000000' THEN 顧客番号 ELSE 代表顧客番号 END
, 代表顧客番号
, 氏名
, 売上日
お礼が遅くなり、申し訳ございません。
SUM文の中でも、条件をうまく使えばマイナス計算処理もできそうですね。
この悩みも解決できそうです。良い処理方法をご教授頂き、ありがとうございました。

No.2
- 回答日時:
INSERT INTO TABLE2(営業所,顧客番号,代表顧客番号,氏名,売上日,売上区分,販売数量,"販売金額(税込)",消費税)
SELECT 営業所
, CASE 代表顧客番号 WHEN '000000' THEN 顧客番号 ELSE 代表顧客番号 END AS 顧客番号
, 代表顧客番号
, 氏名
, 売上日
, CASE WHEN SUM(販売数量) < 0 THEN MAX(売上区分) ELSE MIN(売上区分) END AS 売上区分
, SUM(販売数量) AS 販売数量
, SUM("販売金額(税込)") AS "販売金額(税込)"
, SUM(消費税) AS 消費税
FROM TABLE1
GROUP BY 営業所
, CASE 代表顧客番号 WHEN '000000' THEN 顧客番号 ELSE 代表顧客番号 END
, 代表顧客番号
, 氏名
, 売上日
いつも教えていただき、ありがとうございます。
こういう作り方があるんだと、毎回発見ばかりで参考になります。
追加で質問となりますが、TABLE1の販売数量・販売金額・消費税などの数値項目でマイナスの場合でもマイナス表記されない(売上区分’2’がマイナスの位置づけです)としても、TABLE2で同様の結果を求めたい時の集計はできるのでしょうか。
(TABLE1:処理前)
営業所,顧客番号,代表顧客番号,氏名,売上日,売上区分,販売数量,販売金額(税込),消費税
1000,900001,900001,田中太郎,20180801,1,0,0,0 ①
1000,000001,900001,田中太郎,20180801,1,1,1080,80 ②
1000,000002,900001,田中太郎,20180801,1,2,2160,160 ③
1000,000002,900001,田中太郎,20180801,2,1,540,40 ④
1000,000003,000000,佐藤三郎,20180730,1,4,3240,240 ⑤
1000,000003,000000,佐藤三郎,20180802,1,1,540,40 ⑥
2000,000001,000000,村井四郎,20180803,1,5,4320,320 ⑦
2000,000001,000000,村井四郎,20180803,2,2,324,24 ⑧
(TABLE2:処理後)
営業所,顧客番号,代表顧客番号,氏名,売上日,売上区分,販売数量,販売金額(税込),消費税
1000,900001,900001,田中太郎,20180801,1,2,2700,200 計算結果は②③④の合算を①の代表顧客へ反映
1000,000003,000000,佐藤三郎,20180730,1,4,3240,240 計算結果は⑤のみ
1000,000003,000000,佐藤三郎,20180802,1,1,540,40 計算結果は⑥のみ
2000,000001,000000,村井四郎,20180803,1,3,3996,296 計算結果は⑦⑧の合算
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLでグループ化した結果の件数...
-
Accessで期間指定の売上合計と...
-
アクセスのクエリについて(前...
-
改行コードを削除して取得する...
-
PHP+MySQLで複数配列の挿入(IN...
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
変数が選択リストにありません
-
エクセルVBAで5行目からオート...
-
Accessクエリーで両方のテーブ...
-
SUBSTRING 関数に渡した長さの...
-
Accessでテーブル名やクエリ名...
-
FROM の中で CASE を使えるでし...
-
ACCESSのクエリで集計で、先頭...
-
Oracle 2つのDate型の値の差を...
-
エクセルグラフの凡例スペース
-
テーブルの存在チェックについて
-
Accessのクエリでデータの入力...
-
INSERT文(2)について
-
【Access】フォームで自動計算...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01722: 数値が無効です
-
フォームで検索 エラーの表示...
-
SQLでグループ化した結果の件数...
-
項目名の制限について
-
改行コードを削除して取得する...
-
MySQLで改行を含む文の登録のし...
-
集計のSQLをお教え下さい
-
アクセスのクエリについて(前...
-
SQL文 2つのテーブルから、グ...
-
Access クエリ内のクエリ
-
Accessで期間指定の売上合計と...
-
SQLが分かりません
-
updateについて(SQL)
-
SQL文 グループ集計TOPに対する...
-
オラクルSQLの累計値取得方法に...
-
集合関数(MIN)で取得した値を...
-
ORACLEのUPDATEについて...
-
日付に関するSQL分で
-
SQLの抽出方法について
-
列名無効について
おすすめ情報