针对 SQL Server,我实际上是在尝试根据年初至今计算一个值,因此我想对 2012 年 7 月 16 日及之前的任何值求和并显示它们。我正在使用以下查询(请注意,我已将参数替换为简单的整数来计算今天的值):
SELECT SUM(CASE
WHEN (
(
dns.ODAY <= 16
AND (dns.fiscalyear + 1) = 13
AND dns.omonth = 7
)
OR
(
(dns.fiscalyear + 1) = 13
AND dns.omonth < 7
)
)
THEN dns.QtyShipped
ELSE 0
END) AS Shipped_Units
FROM myTable dns
但是,此查询为所有行返回 0。如果我将 dns.QtyShipped 替换为一个整数,比如 1,它仍然返回 0。所以显然 case 语句没有被正确评估。我的逻辑有问题吗?还是语法问题(例如我需要更多括号)?
谢谢!
附加评论:
为了测试,我运行了以下查询:
SELECT SUM(dns.QtyShipped)
FROM myTable dns
where
(dns.ODAY <= 16
AND (dns.fiscalyear + 1) = 13
AND dns.omonth = 7)
OR
((dns.fiscalyear + 1) = 13
AND dns.omonth < 7)
它返回一个非常大的数字。这令人困惑。