Tsql 求和和和having子句的麻烦

Tsql 求和和和having子句的麻烦,tsql,Tsql,我有一个查询,用于填充“已注销”小时数的报告,其总数是RegHrs、OvtHrs和SpecialOvtHrs之和,但只有那些值具有正值(这些字段中的每个字段都可能具有正值和负值-正值为“已注销”) 我使用的查询(不起作用)是: 我需要为每个员工、WBS1、WBS2组合找到注销工时 我已经试过十几种不同的方法来处理中的子句,但都无法得到准确的结果 在sum()中使用大小写: 出于对数学的好奇,您还可以用以下方式对求和进行编码: sum((LD.RegHrs + abs(LD.RegHrs) +

我有一个查询,用于填充“已注销”小时数的报告,其总数是RegHrs、OvtHrs和SpecialOvtHrs之和,但只有那些值具有正值(这些字段中的每个字段都可能具有正值和负值-正值为“已注销”)

我使用的查询(不起作用)是:

我需要为每个员工、WBS1、WBS2组合找到注销工时


我已经试过十几种不同的方法来处理
中的
子句,但都无法得到准确的结果

sum()中使用
大小写


出于对数学的好奇,您还可以用以下方式对求和进行编码:

sum((LD.RegHrs + abs(LD.RegHrs) +
    (LD.OvtHrs + abs(LD.OvtHrs) + 
    (LD.SpecialOvtHrs + abs(LD.SpecialOvtHrs)) / 2

虽然可读性稍差,但它使用的代码更少,可能会给同事留下更深刻的印象:)

哦,我的。。。这是一个美丽的方法,我甚至没有想到。这就是为什么我爱你!谢谢波希米亚人。对上面的解决方案进行一次编辑。我需要说明何时RegHrs为0而不是>0,因为我还必须包括负值。@DJGray仅用于RegHrs?其他的都是正面的?您的having子句尝试具有
sum(LD.RegHrs)>0
,表明仅正过滤器适用于所有3个更长的解释:我们将内部应用程序中的转移小时导入我们的会计系统。为此,我们针对作业a创建了一个负时间表,针对作业B创建了一个相应的正时间表。例如,我针对作业a创建了原始的10小时,针对作业a(a wash)创建了负10小时,针对作业B创建了新的转移10小时。针对a的+10和-10标记为“注销”,但事实是,它们不是真正的注销,我需要对此作出解释。我通过得到所有工作的所有小时数的总和来实现。(续)剩下的任何东西,不是净值为零,我知道是真正的注销。我知道解释起来很混乱,这也许可以解释为什么编写代码会让人困惑。
select blah, blah, 
  sum(
    case when LD.RegHrs > 0 then LD.RegHrs else 0 end +
    case when LD.OvtHrs > 0 then LD.OvtHrs else 0 end +
    case when LD.SpecialOvtHrs > 0 then LD.SpecialOvtHrs else 0 end
  ) as [Hours], blah, blah
from blah join blah ...
group by blah, blah
-- no having clause
sum((LD.RegHrs + abs(LD.RegHrs) +
    (LD.OvtHrs + abs(LD.OvtHrs) + 
    (LD.SpecialOvtHrs + abs(LD.SpecialOvtHrs)) / 2