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

看起来这个问题正在发生,因为您的交易表上没有主键(如您的其他帖子中所暗示的那样),或者您没有加入它。这意味着只要至少有 1client_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 回答