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

求助:编写SQL实现两列统计不同条目并在第三列求和

解决你的SQL统计需求

没问题,我来帮你调整这个SQL语句~你需要的是在同一条查询里完成两个条件的统计,再计算总和,同时加上日期过滤,用CASE WHEN配合聚合函数就能高效实现,避免重复扫描表。

下面是调整后的SQL语句:

SELECT
    -- 统计Conventional列:符合l16lcode=46且指定l46adr范围的ecarrno数量
    COUNT(CASE 
            WHEN l16lcode = 46 
                 AND l46adr IN ('680','657','693','623','639','704','644','679')
            THEN ecarrno 
          END) AS Conventional,
    -- 统计Auto列:符合admunit='16AP'且指定l46adr范围的条目数量
    COUNT(CASE 
            WHEN admunit = '16AP' 
                 AND l46adr IN ('611','618','637','638')
            THEN admunit 
          END) AS Auto,
    -- 计算前两列的总和
    (COUNT(CASE 
            WHEN l16lcode = 46 
                 AND l46adr IN ('680','657','693','623','639','704','644','679')
            THEN ecarrno 
          END) + COUNT(CASE 
            WHEN admunit = '16AP' 
                 AND l46adr IN ('611','618','637','638')
            THEN admunit 
          END)) AS Total
FROM L16T3
-- 应用日期范围过滤条件
WHERE DATREG >= @('START DATE',datreg);

细节补充说明:

  • 如果ecarrno存在重复值,想要统计唯一编号的数量,把COUNT(CASE...)改成COUNT(DISTINCT CASE...)即可。
  • 对于Auto列,因为已经限定admunit='16AP',用COUNT(CASE...)和COUNT(*)效果一致,但保留admunit更贴合你的需求描述。
  • 日期条件@('START DATE',datreg)我保留了你原有的写法,这应该是你使用的报表工具或数据库的参数语法,确保它能正确解析就行。

如果你的原始SQL是因为多次查询表、条件逻辑冲突导致问题,这个写法应该能完美解决你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:13:20