2016-05-26 3 views
1

凹凸の行を持つテーブルの合計:私はselect * from payment_tbl inner join discount_tblを行う場合SQL:私はこのSQL文を持って

SELECT 
payment.receipt AS or_no, 
payment.payment_dt, 
payment.vno, 
concat(p.family_name, ', ', p.given_name, ' ', p.middle_name, COALESCE(', ' || p.suffix, '')) AS name, 
$$English's Special$$ AS department, 
SUM(payment.amount) AS income, 
SUM(discount.amount) AS discount, 
0 AS other_discount, 
0 AS tax 
FROM payment_tbl payment 
LEFT JOIN person p ON payment.person_id = p.id 
INNER JOIN discount_tbl discount on payment.vno = discount.vno 
GROUP BY or_no, name, payment_dt, payment.vno, payment.amount 

UNION ALL 

... 


SELECT * FROM payment_tbl: 
receipt | amount | vno 
1  | 5000 | V2016197 

SELECT * FROM discount_tbl; 
id | vno  | gross | amount (20% discount) 
1 | V2016197 | 0  | 0 
2 | V2016197 | 0  | 0 
3 | V2016197 | 3000 | 600 

、結果はこのようにSUM(payment.amount)が15000の代わりに5000

なり、3行になります

どのようにして2つのテーブルに参加できますか?

+1

あなたのロジック/問題は、私には明確ではありません。 2つのテーブルを結合しても、1つのレコードだけが 'gross'に対してゼロ以外の値を持ちます。それでは、ここで何を達成しようとしていますか? –

答えて

0

私の提案ですか?

SELECT 
payment.receipt AS or_no, 
payment.payment_dt, 
payment.vno, 
concat(p.family_name, ', ', p.given_name, ' ', .middle_name, COALESCE(', ' || p.suffix, '')) AS name, 
$$English's Special$$ AS department, 
SUM(payment.amount) AS income, 
(SELECT SUM(d.amount) FROM discount_tbl d 
WHERE d.vno = payment.vno) as discount , 
0 AS other_discount, 
0 AS tax 
FROM payment_tbl payment 
LEFT JOIN person p ON payment.person_id = p.id 
GROUP BY or_no, name, payment_dt, payment.vno, payment.amount 

ところで、.middle_nameCONCAT()あなたが不足している別名で、タイプミス:それは重複するレコードを生成しません、discount_tblの量を合計する相関クエリを使用しますか? JOIN

+0

ありがとう、これはうまくいきました。私はサブセレクトとしてSUM(payment.amount)を作ることに焦点を当てており、それを動作させることはできません。 – sophie

0
select (select sum(amount) from payment_tbl a where a.vno = b.vno) as amount 
from discount_tbl b 

このクエリを試してみてください。結合する代わりに、副問合せを使用して金額を取得します。

0

あなたはdiscount_tblテーブルの上にあなたの割引をSUMして作成したテーブルを使用する必要があります

. 
. 
SUM(payment.amount) AS income, 
discount.amount AS discount, 
0 AS other_discount, 
0 AS tax 
FROM payment_tbl payment 
LEFT JOIN person p ON payment.person_id = p.id 
INNER JOIN (SELECT vno,SUM(amount) amount FROM discount_tbl GROUP BY vno) discount 
on payment.vno = discount.vno 
. 
. 
関連する問題