2012-12-26 36 views
2

task_paymentsMySQL的總和一個表,但不同類型

task_payments

SELECT t.id AS task_id, t.name, t.created_at 
     ,COALESCE(SUM(tp1.amount),0) AS paid 
     ,COALESCE(SUM(tp2.amount),0) AS paid_back 
     FROM tasks AS t 
     LEFT JOIN task_payments AS tp1 ON tp1.task_id=t.id AND tp1.type='1' 
     LEFT JOIN task_payments AS tp2 ON tp2.task_id=t.id AND tp2.type='0' 
     WHERE t.customer_id='4' 
     GROUP BY tp1.task_id, tp2.task_id 
     ORDER BY t.id ASC 

您好,存在兩種類型的(1或0)上task_payments。類型0被退回。類型1已付款。我想單獨總金額作爲結果。所以我想要結果; task_id = 5 paid = 450 paid_back = 10 我應該使用連接。如果有過濾請求,我將在where子句中使用付費和付費。例如:與paid_back> 0

回答

2

也許下面的查詢可以幫助你:D

SELECT x.* 
FROM 
    (
     SELECT a.task_id, 
       SUM(CASE WHEN b.type = 1 THEN b.amount ELSE 0 END) paid, 
       SUM(CASE WHEN b.type = 0 THEN b.amount ELSE 0 END) paidBack 
     FROM tasks a 
       LEFT JOIN task_payments b 
        ON a.id = b.task_id 
     -- WHERE a.customer_id = 4 
     GROUP BY a.task_id 
    ) x 
-- WHERE x.paid > 100 -- sample Request 
+0

我有兩個表,我想從任務表中獲取task_id。 –

+0

@ArdaTünuz看到我的更新。 –

+0

@JW。我允許自己編輯帖子並做一個小小的改正。 –

1

除了JW的答案,我想提出一點,

如果你的要求是默認空然後去對於

nvl(sum(field),0) instead of COALESCE(SUM(tp1.amount),0) 

如果你的數據庫支持犯規然後nvlIFNULL

希望這也可以幫助你:)

相關問題