t-sql - 2 个应该相同的 T-SQL 查询却没有

标签 t-sql

据我所知,我有以下两个查询应该产生相同的结果,但它们实际上产生了截然不同的数字。为什么“之间”日期与指定这些日期的月份和年份不同? 可能是什么原因造成的?

SELECT [Account]
    , SUM([Amount]) AS [Amount]
FROM [Table]
WHERE [Account] = 'Specific Account'
AND Month([Date]) = 5
AND Year([Date]) = 2015
GROUP BY [Account]

总和结果:-1,500,000

SELECT [Account]
    , SUM([Amount]) AS [Amount]
FROM [Table]
WHERE [Account] = 'Specific Account'
AND [Date] BETWEEN '2015-05-01' AND '2015-05-31'
GROUP BY [Account]

总结果:350,000

我需要第一个查询正确,因为我需要按月和年对结果进行分组,这使用第二个查询会很麻烦。

我最终需要的查询:

SELECT [Account]
    , Month([Date]) AS [Month]
    , Year([Date]) AS [Year]
    , SUM([Amount]) AS [Amount]
FROM [Table]
GROUP BY [Account]
    , Month([Date])
    , Year([Date]) 

最佳答案

 [Date] BETWEEN '2015-05-01' AND '2015-05-31'

将仅包含 31 日的行,其中时间部分为午夜,并忽略当天的其余时间。

您应该忘记 BETWEEN,因为没有可以放在右侧的有效字符串文字,可以正确处理 datetimesmalldatetime,datetime2(0)..datetime2(7) 并使用

WHERE [Date] >= '2015-05-01' AND [Date] < '2015-06-01'

关于t-sql - 2 个应该相同的 T-SQL 查询却没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31682780/

相关文章:

t-sql - SQL Server 链接服务器错误

sql-server - 查询将行转换为列值而不使用 PIVOT

t-sql - 在流分析工作中可以有多个查询吗?

sql - 选择只有一个订单且该订单满足某些条件的所有用户

t-sql - 如果单词之间有空格,则在 SSRS 中拆分字符串

sql - 警告 : Null value is eliminated by an aggregate or other SET operation

sql-server - Azure SQL Server 中的临时表在存储过程中第二次插入时返回错误

sql - 从 varchar 字段返回有效日期的函数

sql - 使连接条件更具排他性会导致查询挂起

t-sql - 如何防止此 SQL 中发生死锁