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