sum()不能按预期工作

时间:2018-07-23 16:04:07

标签: sql sql-server select sql-server-2012 sum

我有一个查询,可以查询个人的月收入。我想得到他们不同收入的总和(2个工作,退休金等)。由于它们是月度值,因此我还需要乘以12才能获得其年总收入

select DISTINCT f.monthly * 12 as [Income]
    FROM 
    Money
    WHERE
    ID_ = 5
    AND type = 'income';

这给了我

Income
6756
32772

这就是我要对列进行总计的方式

select DISTINCT SUM(f.monthly * 12) as [Income]        
        FROM 
        Money
        WHERE
        ID_ = 5
        AND type = 'income';

这给了我

Income
237168

当总数应该为39528时。我试过移动方括号,以使其首先对列求和,然后乘以12,但得到的结果相同

3 个答案:

答案 0 :(得分:3)

原始查询中的distinct就是错误的-如果两个人的收入相同,则只取其中一个。第二个查询中的distinct本身不是错误的,只是没有意义。 SUM返回一行,因此对其应用distinct不会执行任何操作。

长话短说-丢失两个查询中的distinct修饰符,您就可以了。

答案 1 :(得分:1)

您需要子查询:

select sum(income)
from (select distinct f.monthly * 12 income
      from Money
      where ID_ = 5 and type = 'income'
     ) t;

答案 2 :(得分:1)

您需要将distinct放置在sum函数内部,而不是外部...

select SUM(DISTINCT f.monthly * 12) as [Income]        
    FROM 
    Money
    WHERE
    ID_ = 5
    AND type = 'income';