こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQL文がかけません

次のようなテーブルが有ります

client_code , client_name, closed_day , receipt(入金額) ,sales(今月請求額) ,collection_date入金予定月
1 , aaa  , 201804 , 10000 , 30000 , 201806
1 , aaa  , 201805 , 20000 , 40000 , 201807
1 , aaa  , 201806 , 30000 , 50000 , 201808
2 , bbb  , 201804 , 40000 , 50000 , 201805
2 , bbb  , 201805 , 50000 , 60000 , 201806
2 , bbb  , 201806 , 60000 , 70000 , 201807
3 , ccc  , 201804 , 70000 , 30000 , 201807
3 , ccc  , 201805 , 80000 , 40000 , 201808
3 , ccc  , 201806 , 90000 , 50000 , 201809




ここから下のような表を作りたいと思っています。

6月入金管理表
会社コード , 入金予定額 , 売上月 , 実績入金額
1 , aaa , 30000  , 201804 , 30000
2 , bbb , 60000 , 201805 , 60000
3 ,


こんな感じで各月での入金予定額(aaaの場合2ヶ月前の請求額、bbbは1ヶ月前)
と、実際の入金額を比較したいと思っています。
しかし、SQL文がまったくわかりません。

SELECT 文中にCASE WHENを使って頑張ってみたんですが
1 , aaa , 30000  , 201804 ,  0
1 , aaa ,  0   , 201806 , 30000

のように、2行に分かれてしまいます。
現在のSQL文は汚いですが以下の感じです。

SELECT client_code , client_name , closed_day,
CASE WHEN collection_date ='2018/06' THEN sales ELSE 0 end as '入金予定額' ,
CASE WHEN closed_day ='2018/06' THEN receipt ELSE 0 end as '入金額'
FROM Data
WHERE closed_day ='2018/06' OR collection_date ='2018/06'
GROUP BY client_code , client_name ,closed_day ,
collection_date ,sales ,receipt
ORDER BY client_code

どなたかお助けください

投稿日時 - 2018-05-23 16:47:33

QNo.9501191

すぐに回答ほしいです

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

> 一旦別テーブルに分けないとだめでしょうか?

No.2の回答のSQLは1つのテーブルに2つの別名を付けて、あたかも2つテーブルがあるかのように見せかけるという手法を使っています。
なので、別のテーブルを事前に用意する必要はありません。そのままSQLを実行してみてください。

投稿日時 - 2018-05-24 11:17:12

お礼

しらべてみました。
自己結合ってやつですね。
初めて知りました。
ありがとうございました。

投稿日時 - 2018-05-24 13:13:07

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

SELECT a.client_code , a.client_name , a.closed_day,
a.sales as 入金予定額 ,
b.receipt as 入金額
FROM Data a inner join Data b on a.client_code = b.client_code and a.collection_date = b.closed_day
WHERE b.closed_day ='2018/06'
ORDER BY a.client_code

少しだけ間違えていたので訂正します。('201806' を '2018/06' に直しただけ)

投稿日時 - 2018-05-24 09:20:55

お礼

ご回答ありがとうございます。
でも、入金予定額も、入金額も同一テーブルに入ってるんですよね。
一旦別テーブルに分けないとだめでしょうか?

投稿日時 - 2018-05-24 10:59:22

ANo.1

SELECT a.client_code , a.client_name , a.closed_day,
a.sales as 入金予定額 ,
b.receipt as 入金額
FROM Data a inner join Data b on a.client_code = b.client_code and a.collection_date = b.closed_day
WHERE b.closed_day ='201806'
ORDER BY a.client_code


上記のような感じでいいのかな?

投稿日時 - 2018-05-24 09:17:52

あなたにオススメの質問