我有以下查询,其中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
答案 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)
表达式。)