
集計して抽出するためのSQL作成方法について悩んでいます。
顧客T
営業所,顧客コード,氏名,請求顧客コード,顧客累積コード
100,10001,氏名A1,10001,10001002
100,10002,氏名B1,10004,10002002
100,10003,氏名B2,10004,10003002
100,10004,氏名B代,10004,10004002
100,90001,氏名A11,90001,10001001
100,90002,氏名B11,90004,10002001
100,90003,氏名B22,90004,10003001
100,90004,氏名B代1,90004,10004001
売上T 処理前
顧客累積コード,営業所,顧客コード,年月,科目,売上日,売上数,税込金額,税抜金額,消費税,請求顧客コード
10001002,100,10001,201808,1,20180820,3.5,1620,1500,120,10001
10001001,100,90001,201808,1,20180806,4.0,2160,2000,160,90001
10001001,100,90001,201808,2,20180806,3.0,1080,1000,80,90001
10002002,100,10002,201808,1,20180825,7.0,3240,3000,240,10004
10003002,100,10003,201808,1,20180825,2.0,1080,1000,80,10004
10002001,100,90002,201808,1,20180810,1.0,540,500,40,90004
10003001,100,90003,201808,1,20180810,1.5,810,750,60,90004
10003001,100,90003,201808,2,20180810,0.5,270,250,20,90004
売上T 処理後
顧客累積コード,営業所,顧客コード,年月,科目,売上日,売上数,税込金額,税抜金額,消費税,請求顧客コード
10001002,100,10001,201808,1,20180820,3.5,1620,1500,120,10001
10001001,100,90001,201808,1,20180806,1.0,1080,1000,80,90001
10004002,100,10004,201808,1,20180825,9.0,4320,4000,320,10004
10004001,100,90004,201808,1,20180810,2.0,1080,1000,80,90004
売上Tで請求顧客コードごとに1件化する処理を行いたいと思っています。
(処理したいこと)
○営業所・請求顧客コード・年月・売上日ごとに、集計します。
○集計する項目は、売上数・税込金額・税抜金額・消費税です。
○売上数は文字列のため、数値に変換します。
○科目:1はプラス計算、2はマイナス計算します。
○請求顧客コード(代表)のところには集計した後に、請求顧客コードを顧客コードに書き換えます。
(例)顧客コード:10002・10003の請求顧客コードは10004、顧客コード:90002・90003の請求顧客コードは90004です。一件化して抽出した際に、顧客コードは10004・90004になります。
○営業所は複数存在します。上記データでは営業所:100のものを例に記載しています。
○処理したデータは、売上T 処理後のような結果で抽出したいです。
SELECT
売上T.営業所
, 売上T.請求顧客コード
, 売上T.年月
, 売上T.売上日
, SUM(CASE WHEN 売上T.科目 = 2 THEN TO_NUMBER(売上T.売上数) * -1 ELSE TO_NUMBER(売上T.売上数) END) AS 売上数
, SUM(CASE WHEN 売上T.科目 = 2 THEN 売上T.税込金額 * -1 ELSE 売上T.税込金額 END) AS 税込金額
, SUM(CASE WHEN 売上T.科目 = 2 THEN 売上T.税抜金額 * -1 ELSE 売上T.税抜金額 END) AS 税抜金額
, SUM(CASE WHEN 売上T.科目 = 2 THEN 売上T.消費税 * -1 ELSE 売上T.消費税 END) AS 消費税
FROM
売上T
GROUP BY
売上T.営業所
, 売上T.請求顧客コード
, 売上T.年月
, 売上T.売上日
;
このようなSQLにて集計することまではできるのですが、以降の処理でどのように作成するのか悩んでいるところです。どう処理するのがいいのか、教えてください。
No.2ベストアンサー
- 回答日時:
よくわらかないので、この情報ではせいぜいこのレベルです。
SELECT
C.顧客累積コード
, C.営業所
, C.請求顧客コード AS 顧客コード
, C.年月
, 1 AS 科目
, C.売上数
, C.税込金額
, C.税抜金額
, C.消費税
, C.請求顧客コード
FROM
(
SELECT
A.営業所
, A.請求顧客コード
, A.年月
, A.売上日
, B.顧客累積コード
, SUM(DECODE(A.科目, 1, TO_NUMBER(売上数), 2, TO_NUMBER(売上数) * 1) AS 売上数
, SUM(DECODE(A.科目, 1, TO_NUMBER(税込金額), 2, TO_NUMBER(税込金額) * 1) AS 税込金額
, SUM(DECODE(A.科目, 1, TO_NUMBER(税抜金額), 2, TO_NUMBER(税抜金額) * 1) AS 税抜金額
, SUM(DECODE(A.科目, 1, TO_NUMBER(消費税), 2, TO_NUMBER(消費税) * 1) AS 消費税
FROM
売上T A
, 顧客T B
WHERE
売上T.営業所 = 顧客T.営業所
AND 売上T.請求顧客コード = 顧客T.顧客コード
GROUP BY
A.営業所
, A.請求顧客コード
, A.年月
, A.売上日
, B.顧客累積コード
) C
情報不足のなか、お答えいただき、ありがとうございました。
なんとか作ってみましたが、naktakさんの方法を参考にしつつ作ってみるとどのように動作するのか確認してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLでグループ化した結果の件数...
-
MySQLで改行を含む文の登録のし...
-
項目名の制限について
-
Accessで期間指定の売上合計と...
-
PHP+MySQLで複数配列の挿入(IN...
-
「直需」の意味を教えてください
-
Excel 2019 のピボットテーブル...
-
変数が選択リストにありません
-
Accessでテーブル名やクエリ名...
-
SUBSTRING 関数に渡した長さの...
-
エクセルVBAで5行目からオート...
-
エクセルグラフの凡例スペース
-
Oracle 2つのDate型の値の差を...
-
SQLServer2005のSQL文での別名...
-
Accessでテーブルの値をテキス...
-
Accessクエリーで両方のテーブ...
-
ACCESSのクエリで集計で、先頭...
-
Accessでコードを入れると名前...
-
3つの表を1つに縦に連結する
-
テーブルの存在チェックについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01722: 数値が無効です
-
フォームで検索 エラーの表示...
-
SQLでグループ化した結果の件数...
-
項目名の制限について
-
改行コードを削除して取得する...
-
MySQLで改行を含む文の登録のし...
-
集計のSQLをお教え下さい
-
アクセスのクエリについて(前...
-
SQL文 2つのテーブルから、グ...
-
Access クエリ内のクエリ
-
Accessで期間指定の売上合計と...
-
SQLが分かりません
-
updateについて(SQL)
-
SQL文 グループ集計TOPに対する...
-
オラクルSQLの累計値取得方法に...
-
集合関数(MIN)で取得した値を...
-
ORACLEのUPDATEについて...
-
日付に関するSQL分で
-
SQLの抽出方法について
-
列名無効について
おすすめ情報