代码之家  ›  专栏  ›  技术社区  ›  Aaron

SQL Server 2005求和查询

  •  1
  • Aaron  · 技术社区  · 15 年前

    我正在尝试在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语句中有一种聪明的方法可以快速实现这一点,那就最好了。

    非常感谢您的帮助。

    谢谢!

    3 回复  |  直到 15 年前
        1
  •  4
  •   cjk    15 年前

    您可以将总和检查移到HAVING子句,然后移到WHERE子句:

    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
    
        2
  •  1
  •   Robin Day    15 年前

    在WHERE子句中不能求和,但可以使用HAVING子句。例如

    SELECT
        Id
    FROM
        Table
    GROUP BY
        Id
    HAVING
        SUM(Amount) = 100
    
        3
  •  1
  •   pjp    15 年前

    每个表的复制可能尚未完全完成。 !当然,这是一个需要解决的问题,而不是一个围绕记录计数检查的工作。

    如何复制数据?