2

task_payments

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

こんにちは、task_paymentsには2つのタイプ(1または0)があります。タイプ0は返済されます。タイプ1が支払われます。結果として別途合計金額が欲しいです。だから私は結果が欲しい。task_id = 5 payed = 450 payed_back =10joinを使用する必要があります。フィルタリクエストがある場合は、where句でpaidおよびpaid_columsを使用します。例:およびpaid_back> 0

4

2 に答える 2

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
于 2012-12-26T08:41:15.680 に答える
1

JWの回答とは別に、私は1つのことを提案したいと思います。

要件がデフォルトのnullである場合は、

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

あなたのデータベースがサポートnvlしていない場合は、IFNULL

これがあなたにも役立つことを願っています:)

于 2012-12-26T08:57:14.157 に答える