アプリ版:「スタンプのみでお礼する」機能のリリースについて

集計して抽出するための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にて集計することまではできるのですが、以降の処理でどのように作成するのか悩んでいるところです。どう処理するのがいいのか、教えてください。

A 回答 (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
    • good
    • 0
この回答へのお礼

情報不足のなか、お答えいただき、ありがとうございました。

なんとか作ってみましたが、naktakさんの方法を参考にしつつ作ってみるとどのように動作するのか確認してみます。

お礼日時:2018/09/01 18:51

oracleで間違いないスカ?

    • good
    • 0
この回答へのお礼

はい。
oracleです。

お礼日時:2018/08/21 10:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!