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

问题描述:

我有下面的查询,其中金额(金额)字段返回我0而不是实际的金额值。量场的金额返回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 0-03-01 4517.45 
2014/03 0-03-01 2120.77 
2014/03 0-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

请发布架构和示例数据。 – 2014-09-04 23:45:09

+0

另外,请在删除“GROUP BY”语句时发布SELECT查询的结果。 – Dai 2014-09-04 23:47:36

+1

count [*] - count([Amount])作为[Amount_null]将始终产生0,因为您获得的计数值相同。 – 2014-09-04 23:52:00

合乎逻辑的结论是,Amount您的数据总和,事实上,0.00元。

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

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

Here是SQL小提琴。

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

  • NULL值在SUM()(和AVG()MIN()MAX()太)
  • count(*)-count([Amount])是否被正确用于计数NULL值的数目(尽管我更喜欢的sum(case when Amount is NULL then 1 else 0 end)的更明确的制剂)将被忽略。