Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 检查和并忽略零值?_Sql_Sql Server - Fatal编程技术网

Sql 检查和并忽略零值?

Sql 检查和并忽略零值?,sql,sql-server,Sql,Sql Server,我有一个交易明细表,我正试图将其编译成每笔交易的一个总和。下面是一些示例行的图像。不需要detail_id,只是在那里显示细节 我希望通过tran_num编译总计,同时忽略collections_go_to列,我需要最终结果的ID,但前提是调整ID、响应方ID、输入的日期和“位置”与tran_num的另一行匹配 我意识到这可以很容易地通过小组来完成。我的问题是,我将如何在检查之前进行基本检查,以查看是否: 传输数量和位置匹配的SUMamount 0: 所以像这样的行可以求和,然后因为是零值而

我有一个交易明细表,我正试图将其编译成每笔交易的一个总和。下面是一些示例行的图像。不需要detail_id,只是在那里显示细节

我希望通过tran_num编译总计,同时忽略collections_go_to列,我需要最终结果的ID,但前提是调整ID、响应方ID、输入的日期和“位置”与tran_num的另一行匹配

我意识到这可以很容易地通过小组来完成。我的问题是,我将如何在检查之前进行基本检查,以查看是否: 传输数量和位置匹配的SUMamount 0:

所以像这样的行可以求和,然后因为是零值而被忽略

SELECT tran_num, resp_party_id, collections_go_to, SUM(amount) AS Total, 
    adjustment_id, type, impacts, clinic, date_entered
FROM dbo.transactions
WHERE (status <> 'D')
  AND (status <> 'V')
  AND (adjustment_id IS NOT NULL)
  AND (date_entered > '2015-06-01')
GROUP BY
     tran_num, resp_party_id,
     collections_go_to, adjustment_id,
     type, impacts, clinic, date_entered
这是我当前使用的数据视图,我暂时忽略paytype_id列


编辑更新:感谢您的回复,HAVING子句似乎是处理其中一些问题的方法,但不幸的是,在计算检查时需要忽略collections\u go\u to列,否则我只会得到tran\u num的多个结果。是否有一种方法可以在不使用collections\u go\u to列的情况下执行子查询检查,从而消除任何这样的tran\u num结果为零,但我仍然需要集合go to ID。也许可以查看哪个tran num total为零,然后从最终结果中提取这些ID,作为HAVING子句的替代方法,将查询包装为如下子查询:

SELECT tran_num, resp_party_id, collections_go_to, Total, 
        adjustment_id, type, impacts, clinic, date_entered
FROM (
    SELECT tran_num, resp_party_id, collections_go_to, SUM(amount) AS Total, 
        adjustment_id, type, impacts, clinic, date_entered
    FROM dbo.transactions
    WHERE (status <> 'D')
      AND (status <> 'V')
      AND (adjustment_id IS NOT NULL)
      AND (date_entered > '2015-06-01')
    GROUP BY
         tran_num, resp_party_id,
         collections_go_to, adjustment_id,
         type, impacts, clinic, date_entered
)T
WHERE T.Total <> 0
虽然这里的用法看起来很简单,但总体来说这是一种非常强大的技术。还可以使用CTE实现相同的效果,同时提高可读性:

;WITH T as (
    SELECT tran_num, resp_party_id, collections_go_to, SUM(amount) AS Total, 
        adjustment_id, type, impacts, clinic, date_entered
    FROM dbo.transactions
    WHERE (status <> 'D')
      AND (status <> 'V')
      AND (adjustment_id IS NOT NULL)
      AND (date_entered > '2015-06-01')
    GROUP BY
         tran_num, resp_party_id,
         collections_go_to, adjustment_id,
         type, impacts, clinic, date_entered
)
SELECT tran_num, resp_party_id, collections_go_to, Total, 
        adjustment_id, type, impacts, clinic, date_entered
FROM T
WHERE T.Total <> 0
via:有

  SELECT tran_num, resp_party_id, collections_go_to, SUM(amount) AS Total, 
         adjustment_id, type, impacts, clinic, date_entered
  FROM dbo.transactions
  WHERE (status <> 'D')
    AND (status <> 'V')
    AND (adjustment_id IS NOT NULL)
    AND (date_entered > '2015-06-01')
  GROUP BY
    tran_num, resp_party_id,
    collections_go_to, adjustment_id,
    type, impacts, clinic, date_entered
  Having sum(amount) <> 0

研究HAVING子句