0

下面是我现有的未检查错误值的 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,否则我将只计算正常总和。平均值也是如此。

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

4

2 回答 2

3
SELECT  ur.Domain
,       case 
        when min(ur.DataUsageInBytes) < 0 then -99
        else sum(ur.DataUsageInBytes) 
        end as SumDataUsageInBytes
,       case 
        when min(ur.DataUsageInBytes) < 0 then -99
        else avg(ur.DataUsageInBytes) 
        end as AvgDiskUsageInBytes
FROM    UsageResults ur
WHERE   ur.Year = @year AND ur.Month = @month
GROUP BY 
        ur.Domain
于 2013-04-03T18:51:00.247 回答
0

您可以将每个值变成正数并比较总和

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]
于 2013-04-03T18:50:44.880 回答