2

私はクライアントのプロジェクトに取り組んでおり、これらの金額のステータスが「クリア済み」と記載されている 3 つの異なるテーブルの 3 つの異なる列の合計が必要です。

3 つのテーブルは次のとおりです (例として)。

支払い1

ID | Amount | Status  
1  | 200    | Cleared

支払い2

ID | Amount | Status              
1  | 100    | Cleared

支払い3

ID | Amount | Status  
1  | 300    | Cleared

基本的に達成したいことを行う次のコードを思いつきましたが、処理される値は3倍になります(複数のテーブルから値を追加する場合)。

SELECT SUM(CASE WHEN P1.`Status` = "Cleared" THEN P1.Amount ELSE 0 END) 
     + SUM(CASE WHEN P2.`Status` = "Cleared" THEN P2.Amount ELSE 0 END)
     + SUM(CASE WHEN P3.`Status` = "Cleared" THEN P3.Amount ELSE 0 END) AS ClearedFunds
FROM PAYMENT1 As P1, 
     PAYMENT2 As P2, 
     PAYMENT3 As P3 ;

上記のクエリは、(与えられた例から) 600 の期待される結果ではなく、1800 を返します。

誰が何が問題なのかを知ることができますか?

4

2 に答える 2

1
SELECT  ID, SUM(Amount) totalAmount
FROM
    (
        SELECT  ID, Amount
        FROM    payment1
        WHERE   Status = 'Cleared'
        UNION ALL
        SELECT  ID, Amount
        FROM    payment2
        WHERE   Status = 'Cleared'
        UNION ALL
        SELECT  ID, Amount
        FROM    payment3
        WHERE   Status = 'Cleared'
    ) s
GROUP   BY ID
于 2013-02-12T07:58:00.040 に答える
0

3つの選択クエリでユニオンオールを使用して結果を単一のテーブルとして取得し、合計集計関数を使用してステータスがクリアされた金額の合計を取得できます。

于 2013-02-12T05:25:38.040 に答える