2016-08-19 12 views
0

2つのサブクラスを減算しようとしています。 2つの表は、クエリで達成しようとすると、私は両方COM_PAYMENTSとCOM_RECEIPTSとCOM_PAYMENTSの総量のtender_idsの量の合計を見つける必要があり、合計から減算する必要がまずあるIAM何2つのmysqlサブクエリ間の減算

COM_PAYMENTS 

+++++++++++++++++++ 
tender_id | amount 
+++++++++++++++++++ 
    10  | 200 
    10  | 345 
    22  | 18 
    25  | 45 

COM_RECEIPTS 

+++++++++++++++++++ 
tender_id | amount 
+++++++++++++++++++ 
    10  | 10 
    10  | 15 
    22  | 13 

の下に記載されていますCOM_RECEIPTSの量

Example: The out put in this case should be: 

tender_id | Total 

    10  520 (200 + 345 = 545, 10 + 15 = 25, 545 - 25= 520) 
    22  5 (18 - 13) 
    25  45 (Since COM_PAYMENTS doesnt have any recrds) 

これは私が試したものですが、これまでのデータはCOM_RECEIPTSであるところだけその他の人がそのその表示のブランクを引いていないため、合計を示す:

(select 
SUM(com_payments.amount) 
FROM com_payments 
WHERE view_sales_report.tender_id = com_payments.tender_id) - 
(select 
SUM(com_receipts.rec_amt) 
FROM com_receipts 
WHERE view_sales_report.tender_id = com_receipts.tender_id) 

答えて

3
SELECT tender_id 
    , SUM(amount) total 
    FROM 
    (SELECT tender_id, amount FROM com_payments 
     UNION ALL 
     SELECT tender_id, amount*-1 FROM com_receipts 
    ) x 
GROUP 
    BY tender_id; 

は今後、私はあなたがすべてのTRを記録する、1つのテーブルしか持ってお勧めしますansactions - paymentとreceipts - transaction_idとトランザクションの種類を記録した列。

+0

動作しません:com_receiptsにtender_id = 10の行があります。 amount = -200 – ipeiro

+0

どうしたらいいですか?テーブルがどのように満たされるかはわかりません – ipeiro

+0

はい、これでテーブルがどのように塗りつぶされているのかわかります... – ipeiro

0

おそらくこのようなものは何ですかあなたが必要とする:

SELECT tender_id, SUM(amount) AS amount 
FROM (
    SELECT tender_id, SUM(amount) AS amount 
    FROM COM_PAYMENTS 
    GROUP BY tender_id 
    UNION ALL 
    SELECT tender_id, SUM(amount * -1) AS amount 
    FROM COM_RECEIPTS 
    GROUP BY tender_id 
) a 
GROUP BY tender_id 
+0

ここではあまりにも多くのクエリがあると思います。 – Strawberry

0
SELECT SUM(DISTINCT pa.amount)-IFNULL(SUM(DISTINCT re.amount) , 0) FROM com_payments pa 
LEFT OUTER JOIN com_receipts re ON pa.`tender_id` = re.`tender_id` GROUP BY pa.tender_id 
+0

PRIMARY KEYがない場合、これは実際にはRDBMSの意味での表ではないことに同意します。それでも、私は誰かが同じ金額を二度入札する可能性を認めなければならないと思う。 – Strawberry