我正在尝试在SQL Server 2005上创建一个查询,该查询将检查某些详细记录中某些字段的总和是否等于标题记录中的总字段。这将用于为我正在工作的公司创建支票的电子存款。
层次结构如下所示: 存款 - >批次 - >检查
在创建电子存款文件之前,每个表的复制可能没有完全完成,因此我需要检查以确保在创建文件之前每个记录都在那里。基本上,我想从我的存款表中选择一个位置和ID列表,其中正确的批次数和正确的检查数确实存在于各自的表中。
这是我想要的逻辑。
select location, d.id from closing_balance..cb_deposits as d
left outer join closing_balance..cb_checkbatchhf as b on d.id = b.deposit_id and d.location = b.loc
left outer join closing_balance..cb_checkdf as c on b.id = c.batch_id and b.loc = c.loc
where sum(c.check_amt) = b.scanned_subtotal and sum(b.scanned_subtotal) = d.amount and sum(b.num_checks_scanned) = d.count
上述方法不起作用,因为您不能在where子句中使用聚合函数sum。我可以轻松地以编程方式执行此操作,但如果有一种聪明的方法可以在SQL语句中快速执行此操作,那将是最好的。
非常感谢任何帮助。
谢谢!
答案 0 :(得分:4)
您可以在where子句之后将总和检查移至having子句:
select location, d.id
from closing_balance..cb_deposits as d
left outer join closing_balance..cb_checkbatchhf as b
on d.id = b.deposit_id and d.location = b.loc
left outer join closing_balance..cb_checkdf as c
on b.id = c.batch_id and b.loc = c.loc
group by location, d.id, b.scanned_subtotal, d.amount, d.count
having sum(c.check_amt) = b.scanned_subtotal
and sum(b.scanned_subtotal) = d.amount
and sum(b.num_checks_scanned) = d.count
答案 1 :(得分:1)
您不能在WHERE子句中执行求和,但可以使用HAVING子句。例如
SELECT
Id
FROM
Table
GROUP BY
Id
HAVING
SUM(Amount) = 100
答案 2 :(得分:1)
复制可能尚未完全完成每个表!当然这是需要解决的问题,而不是围绕记录计数检查的工作。
您是如何复制数据的?