You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server统计指定日期账单金额 仅展示总和大于0的分组如何实现

SQL查询问题解答

原有写法正确性说明

你编写的查询逻辑上可以计算出指定日期各MobileNr对应的账单总金额,但存在两处可优化的点:

  • 日期赋值使用的'01.05.2021'是区域相关格式,部分SQL Server实例会按MM.DD.YYYY解析为2021年1月5日,不符合你的查询需求
  • 日期判断放在CASE表达式中会扫描所有MobileNr非空的记录,执行效率偏低

调整方案

要实现仅展示总金额Summ大于0的记录,仅需要在GROUP BY子句后添加HAVING条件过滤聚合结果即可,同时我们可以对原有查询做优化,调整后的完整语句如下:

DECLARE @specified_date DATE;
-- 使用SQL Server无歧义的YYYYMMDD格式,避免区域设置导致的日期解析错误
SET @specified_date = '20210501';

SELECT
    CustomerNr, 
    MobileNr, 
    ROUND(SUM(Price), 2) AS Summ
FROM
    BillingTable  
WHERE
    MobileNr <> ''
    -- 提前过滤目标日期数据,减少无效计算,提升查询效率
    AND Bil_Start_Date = @specified_date
GROUP BY
    CustomerNr, MobileNr
-- 过滤总金额大于0的分组
HAVING ROUND(SUM(Price), 2) > 0

如果你需要保留原有CASE写法(比如后续要扩展同时统计多日期的金额列),仅需要在原有查询的GROUP BY后添加如下HAVING条件即可:

HAVING ROUND(SUM(CASE WHEN Bil_Start_Date = @specified_date THEN Price ELSE 0 END), 2) > 0

内容的提问来源于stack exchange,提问作者dejanm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 19:45:03