0

私は以下の質問を投稿し、いくつかの素晴らしい回答を得ました.

合計するとゼロになる行を表示する方法

私の問題に最も近い答えはこれでした:

    SELECT t1.*
FROM transactions AS t1
INNER JOIN
(
  SELECT
    tbis.client_ref ,
    tbis.supplier_key,
    sum(tbis.client_amount) AS total
  FROM transactions tbis 
  WHERE tbis.client_amount !=0 
  GROUP BY tbis.client_ref, tbis.supplier_key 
  HAVING sum(tbis.client_amount) =0 
) AS t2  ON t1.client_ref = t2.client_ref
        AND t1.supplier_key = t2.supplier_key
ORDER BY t2.total;

私が抱えている問題は、クライアントの金額 = 0 の結果に行が含まれていることです。基本的に、クライアントの金額が 0 でない行に対してのみ以下を実行する必要があります。

何か案は?

どうもありがとう

4

1 に答える 1

0

この問題は、トランザクション テーブルに主キーがない (他の投稿で暗示されているように) か、それに参加していないために発生しているようです。つまり、少なくとも 1 つ存在し、ゼロ以外の値client_refsupplier_keyペアになっている限り、すべての値が返されます。外側のクエリに WHERE を追加するか

SELECT t1.*
FROM transactions AS t1
INNER JOIN
(
  SELECT
    tbis.client_ref ,
    tbis.supplier_key,
    sum(tbis.client_amount) AS total
  FROM transactions tbis 
  WHERE tbis.client_amount !=0 
  GROUP BY tbis.client_ref, tbis.supplier_key 
  HAVING sum(tbis.client_amount) =0 
) AS t2  ON t1.client_ref = t2.client_ref
        AND t1.supplier_key = t2.supplier_key
WHERE t1.client_amount !=0 

ORDER BY t2.total;

またはまた参加するclient_amount

SELECT t1.*
FROM transactions AS t1
INNER JOIN
(
  SELECT
    tbis.client_ref ,
    tbis.supplier_key,
    sum(tbis.client_amount) AS total
  FROM transactions tbis 
  WHERE tbis.client_amount !=0 
  GROUP BY tbis.client_ref, tbis.supplier_key 
  HAVING sum(tbis.client_amount) =0 
) AS t2  ON t1.client_ref = t2.client_ref
        AND t1.supplier_key = t2.supplier_key
        AND t1.client_amount = t2.client_amount

ORDER BY t2.total;
于 2013-10-10T11:07:50.263 に答える