返回0而不是实际总和的金额总和

时间:2014-09-04 23:43:37

标签: sql sql-server sql-server-2008 tsql

我有以下查询,其中sum(Amount)字段返回0而不是实际的总和值。

金额字段的数据类型为十进制(15,2)

查询:

SELECT Period
        ,count(DISTINCT Trans_Date) as [Date_count]
        ,count(*) as Row_No
        ,sum([Amount]) as [Amount_Value]
        ,count(*)-count([Amount]) as [Amount_null]
        FROM table1 
    GROUP BY Period
    ORDER BY Period

结果:

Period  Date_count  Row_No  Amount_Value    Amount_null

2014/03 31          15486   0.00            0

你会建议任何可能的原因吗?感谢。

表架构:

CREATE TABLE table1(
    [Period] [varchar](7) NOT NULL,
    [Account] [varchar](12) NULL,
    [Trans_Date] [date] NULL,
    [Amount] [decimal](15, 2) NULL
)

示例数据:

Period  Account Trans_Date  Amount
2014/03 001234  2014-03-01  4517.45
2014/03 001234  2014-03-01  2120.77
2014/03 001234  2014-03-01  3115.69
2014/03 001245  2014-03-01  1803.78
2014/03 001245  2014-03-01  596.33
2014/03 001245  2014-03-01  null

1 个答案:

答案 0 :(得分:2)

合乎逻辑的结论是Amount对数据的总和实际上是0.00。

作为样本的数据,返回正确的结果:

PERIOD  DATE_COUNT  ROW_NO  AMOUNT_VALUE  AMOUNT_NULL
2014/03 1           6       12154.02      1

Here是一个SQL小提琴。

只是为了纠正评论中的一些误解。

  • SUM()(以及AVG()MIN()以及MAX())中忽略NULL值
  • 正确使用
  • count(*)-count([Amount])来计算NULL值的数量(虽然我更喜欢更明确的sum(case when Amount is NULL then 1 else 0 end)表达式。)