Sql 如果任何一个值为负值,如何修改我的代码以将sum/avg设置为负值

Sql 如果任何一个值为负值,如何修改我的代码以将sum/avg设置为负值,sql,sql-server,tsql,Sql,Sql Server,Tsql,下面是我现有的SQL代码(SQL server),它没有检查错误值。如果月份和年份值匹配,它只计算一个求和列和一个平均列 SELECT ur.Domain, SUM(ur.DataUsageInBytes) as SumDataUsageInBytes, AVG(ur.DiskUsageInBytes) as AvgDiskUsageInBytes FROM UsageResults ur WHERE (ur.Year = @year) AND (ur.Month = @mont

下面是我现有的SQL代码(SQL server),它没有检查错误值。如果月份和年份值匹配,它只计算一个求和列和一个平均列

SELECT ur.Domain, SUM(ur.DataUsageInBytes) as SumDataUsageInBytes, 
       AVG(ur.DiskUsageInBytes) as AvgDiskUsageInBytes
FROM UsageResults ur
WHERE (ur.Year = @year) AND (ur.Month = @month) 
GROUP BY [Domain]
我想添加这样的逻辑,如果任何ur.DataUsageInBytes值(对于给定的月/年)为负,我想将总和设置为-99,否则我将只计算正常总和。平均水平也是如此


如果遇到错误且无法确定其值,则它正在读取的表条目将具有负值。

您可以将每个值转换为正值并比较总和

SELECT ur.Domain
, CASE WHEN SUM(ur.DataUsageInBytes) = SUM(ABS(ur.DataUsageInBytes)) THEN SUM(ur.DataUsageInBytes) ELSE -99 END as SumDataUsageInBytes
, CASE WHEN min(ur.DiskUsageInByters) < 0 THEN -99 ELSE AVG(ur.DiskUsageInBytes) END AS AvgDiskUsageInBytes
FROM UsageResults ur
WHERE (ur.Year = @year) AND (ur.Month = @month) 
GROUP BY [Domain]
选择你的域名
,当SUM(ur.DataUsageInBytes)=SUM(ABS(ur.DataUsageInBytes))然后SUM(ur.DataUsageInBytes)ELSE-99结束为SumDataUsageInBytes时的情况
,当最小值(ur.DiskUsageInBytes)<0时,则-99其他平均值(ur.DiskUsageInBytes)以AvgDiskUsageInBytes结束
来自USAGERSULT ur
其中(ur.Year=@年)和(ur.Month=@月)
分组依据[域]

您可以将每个值转换为正数并比较总和

SELECT ur.Domain
, CASE WHEN SUM(ur.DataUsageInBytes) = SUM(ABS(ur.DataUsageInBytes)) THEN SUM(ur.DataUsageInBytes) ELSE -99 END as SumDataUsageInBytes
, CASE WHEN min(ur.DiskUsageInByters) < 0 THEN -99 ELSE AVG(ur.DiskUsageInBytes) END AS AvgDiskUsageInBytes
FROM UsageResults ur
WHERE (ur.Year = @year) AND (ur.Month = @month) 
GROUP BY [Domain]
选择你的域名
,当SUM(ur.DataUsageInBytes)=SUM(ABS(ur.DataUsageInBytes))然后SUM(ur.DataUsageInBytes)ELSE-99结束为SumDataUsageInBytes时的情况
,当最小值(ur.DiskUsageInBytes)<0时,则-99其他平均值(ur.DiskUsageInBytes)以AvgDiskUsageInBytes结束
来自USAGERSULT ur
其中(ur.Year=@年)和(ur.Month=@月)
分组依据[域]
选择您的域
案例
当最小值(ur.DataUsageInBytes)<0时,则为-99
其他金额(ur.DataUsageInBytes)
以SumDataUsageInBytes结束
案例
当最小值(ur.DataUsageInBytes)<0时,则为-99
else平均值(ur.DataUsageInBytes)
以AvgDiskUsageInBytes结束
来自USAGERSULT ur
其中,年=年,月=月
分组
你的领域
选择您的域
案例
当最小值(ur.DataUsageInBytes)<0时,则为-99
其他金额(ur.DataUsageInBytes)
以SumDataUsageInBytes结束
案例
当最小值(ur.DataUsageInBytes)<0时,则为-99
else平均值(ur.DataUsageInBytes)
以AvgDiskUsageInBytes结束
来自USAGERSULT ur
其中,年=年,月=月
分组
你的领域

DataUsageInBytes怎么可能是负数?它肯定只能是0或更多?磁盘使用率也是如此?@Oded Op在回答这样一个问题时说,如果出现错误,并且当Min(ur.DataUsageInBytes)<0然后-99 else和(ur.DataUsageInBytes)时,实际值无法确定,那么这些列将是负数结束?我有一个powershell脚本,如果无法确定负值,它会将负值写入表中。一个人的许可问题。或者,如果IIS日志文件不包含cs字节和/或sc字节,在这种情况下,我无法确定为该条目传输的数据量。@HABO您应该将其作为答案发布。
DataUsageInBytes
怎么可能是负数?它肯定只能是0或更多?磁盘使用率也是如此?@Oded Op在回答这样一个问题时说,如果出现错误,并且当Min(ur.DataUsageInBytes)<0然后-99 else和(ur.DataUsageInBytes)时,实际值无法确定,那么这些列将是负数结束?我有一个powershell脚本,如果无法确定负值,它会将负值写入表中。一个人的许可问题。或者,如果IIS日志文件不包含cs字节和/或sc字节,在这种情况下,我无法确定为该条目传输的数据量。@HABO您应该将其作为answer@FrodoFraggins使用min可能更快,但不确定差异是否会更大noticeable@FrodoFraggins使用min可能更快,但不确定差异是否明显