Sql server 如果Case语句返回负数并将其更改为零,则返回SQL
我有一个SQL语句,在大多数情况下运行良好。我需要从总数中减去2,但如果这不会导致一个负数的话。如果结果是负数,那么我需要一个零。我不能用计数,我得用总和。 基本上,我正在做的是,如果任务本周完成,将其计数为-2,但结果是负数,虽然我本周可以没有任务到期,但本周不能有负2到期。-2是必需的,因为我无法消除一些其他字段,这些字段将计入总数 问题:如果不产生负数,我怎么写这个来只减去2呢Sql server 如果Case语句返回负数并将其更改为零,则返回SQL,sql-server,Sql Server,我有一个SQL语句,在大多数情况下运行良好。我需要从总数中减去2,但如果这不会导致一个负数的话。如果结果是负数,那么我需要一个零。我不能用计数,我得用总和。 基本上,我正在做的是,如果任务本周完成,将其计数为-2,但结果是负数,虽然我本周可以没有任务到期,但本周不能有负2到期。-2是必需的,因为我无法消除一些其他字段,这些字段将计入总数 问题:如果不产生负数,我怎么写这个来只减去2呢 ,SUM(case when T.[TaskFinishDate] <= DATEADD(DAY, 8-
,SUM(case when
T.[TaskFinishDate] <= DATEADD(DAY, 8-DATEPART(DW, GETDATE()),
Convert(date,getdate())) then 1
else 0
end) - 2 AS Planned
,求和(当
T.[TaskFinishDate]您可以检查您的案例
是否有<0的值,如果小于0,则返回0:
case when
SUM(
case when t.[TaskFinishDate] <= DATEADD(DAY, 8-DATEPART(DW, GETDATE()), Convert(date,getdate()))then 1 else 0 end) - 2 < 0
then 0
else
SUM(case when t.[TaskFinishDate] <= DATEADD(DAY, 8-DATEPART(DW, GETDATE()), Convert(date,getdate())) then 1 else 0 end) - 2
end planned
发生时的情况
总数(
如果t.[TaskFinishDate]不难执行(例如,ISNULL(NULLIF(NULLIF(SUM(…),0),1)-2,0)
就可以了),但理论上,您应该修复查询,这样其他字段就不会被计算在内。