Sql 如果在同一查询中使用,同一轮和/或和执行多少次

Sql 如果在同一查询中使用,同一轮和/或和执行多少次,sql,sql-server,sql-execution-plan,Sql,Sql Server,Sql Execution Plan,DB-SQL Server 201x 下面的代码部分是从测试工具中经过修改的摘录 我的问题是:运行时执行同一轮和有多聪明。。。部分 它是执行第一个事件并将结果用于后续事件,还是多次执行 在SQL Server中有没有更聪明的方法来实现这一点 select person.Name 'Name', account.AccountCode 'Account Code', ROUND(SUM(account.basevalue + account.accuredInteres),

DB-SQL Server 201x

下面的代码部分是从测试工具中经过修改的摘录

我的问题是:运行时执行同一轮和有多聪明。。。部分

它是执行第一个事件并将结果用于后续事件,还是多次执行

在SQL Server中有没有更聪明的方法来实现这一点

select
    person.Name 'Name',
    account.AccountCode 'Account Code',
    ROUND(SUM(account.basevalue + account.accuredInteres), 2)    'Account Total'
    case 
        when ROUND(SUM(account.basevalue + account.accuredInteres), 2) =  ROUND(CAST(audit_data.total as decimal(21,6)), 2) then 'MATCH'
        when 
            ROUND(SUM(account.basevalue + account.accuredInteres), 2)  <= ROUND(CAST(audit_data.total as decimal(21,6)), 2) * 1.01 AND
            ROUND(SUM(faccount.basevalue + account.accuredInteres), 2)  >= ROUND(CAST(audit_data.total as decimal(21,6)), 2) * 0.99
            then 'IN TOLERENCE'
        else 'NOT MATCHING' END 'Values Equal ?'
from
    ----
    ----
where 
    ----

答案取决于执行计划。在本例中,我希望对结果集中的每一行执行7次round。但是,通常在聚合查询中,结果集比初始数据小得多,因此这可能会给查询增加很少的开销

总数是另一回事。执行多少次并不重要。操作中代价高昂的部分是聚合,通常比单个聚合函数更为昂贵


我不确定SQL Server是否优化了多个总和,但我怀疑它对性能有多大影响。

唯一确定的方法是获取计算字段ROUNDSUMaccount.basevalue+account.AccureCenter,2作为普通字段,然后在外部sql select中进行所有比较,但这不是一种适用于所有情况的更好方法,可能不适合您的完整语句。但是,您可以在大型数据集上尝试它,以查看计划和执行时间。我相信额外的成本将是最低的。

检查您的执行计划,看看会发生什么。您总是可以首先在子查询中计算这样的值。