限制SQL中返回的数据

限制SQL中返回的数据,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我把问题贴在下面,得到了一些很好的回答 最接近于回答我问题的答案是: 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 t

我把问题贴在下面,得到了一些很好的回答

最接近于回答我问题的答案是:

    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的行上执行以下操作

有什么想法吗


非常感谢

看起来出现此问题是因为您的事务表上没有主键(如您在其他帖子中所暗示的),或者您没有加入它。这意味着,只要至少有1对
客户参考
供应商密钥
具有非零值,所有值都将返回。 将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\u 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;

SQL只是结构化查询语言-一种被许多数据库系统使用的语言,但不是一种数据库产品。。。很多东西都是特定于供应商的-所以我们真的需要知道您使用的是什么数据库系统(以及哪个版本)(请相应地更新标签)…Genius!选项1将问题归类为处理。你很清楚,我没有加入主键,因为我必须得到每个客户的总数。非常感谢你!