Sql 返回0而不是实际金额的金额之和
我有下面的查询,其中sum(Amount)字段返回的是0,而不是实际的sum值 金额字段的数据类型为十进制(15,2) 查询:Sql 返回0而不是实际金额的金额之和,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有下面的查询,其中sum(Amount)字段返回的是0,而不是实际的sum值 金额字段的数据类型为十进制(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]
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 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
结果:
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
)
样本数据:
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 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.00
将数据作为示例,返回正确的结果:
PERIOD DATE_COUNT ROW_NO AMOUNT_VALUE AMOUNT_NULL
2014/03 1 6 12154.02 1
这是一个SQL小提琴
只是为了纠正评论中的一些误解
- 在
(和SUM()
和AVG()
和MIN()
中忽略空值)MAX()
被正确地用于计算count(*)-count([Amount])
值的数量(尽管我更喜欢更明确的NULL
)sum公式(Amount为NULL,则为1,否则为0结束)
GROUP BY
语句时,请发布SELECT查询的结果。count(*)-count([Amount])as[Amount\u null]将始终生成0,因为您得到的是相同的计数值。在我看来,Amount之和不等于0:使用sum(Isnull([Amount],0))
或总和(合并([金额],0))