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

无需使用UNION ALL合并多个SELECT语句的SQL查询简化方法

SQL查询简化方案

完全可以简化,原查询重复扫描了3次BUDGET表,所有公共过滤逻辑完全一致,仅Accnt表的匹配规则和求和系数有差异,可合并为单次查询实现相同逻辑,性能和可维护性都更好。

优化后代码

SELECT ISNULL(ROUND(SUM(
    CASE 
        WHEN a.ID7 = 'EXPENSES' THEN signeddata
        WHEN a.ID7 = 'MERC' THEN signeddata * -1
        WHEN a.ID11 = 'SYNP' THEN signeddata * -1
        ELSE 0
    END
),2),0) AS TOTAL
FROM BUDGET b
INNER JOIN Accnt a 
    ON b.ACCOUNT = a.ID1
WHERE b.CATEGORY = 'ACTL'
  AND b.TIME BETWEEN '20210100' AND '20210800'
  AND b.CURRENCY = 'DOL'
  AND EXISTS (
      SELECT 1 FROM DataSrc d 
      WHERE d.ID1 = b.DATASRC 
        AND d.ID7 = 'Logic'
  )
  AND EXISTS (
      SELECT 1 FROM Entity e 
      WHERE e.ID1 = b.ENTITY 
        AND e.ID9 = 'H2'
  )
  AND (a.ID7 IN ('EXPENSES','MERC') OR a.ID11 = 'SYNP')

优化说明

  • 减少表扫描次数:原查询需要扫描3次BUDGET表,优化后仅需扫描1次,数据量越大性能提升越明显
  • 消除冗余代码:所有公共过滤条件仅需编写一次,后续调整参数时只需修改一处,避免多段相同逻辑漏改
  • 逻辑更直观:通过CASE WHEN直接匹配不同账户类型对应的计算系数,无需拆分多个子查询再拼接求和

注意:如果Accnt表存在同一个ID1对应多条记录的情况,可将关联的Accnt表替换为(SELECT DISTINCT ID1, ID7, ID11 FROM Accnt) a,避免重复计算BUDGET表数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:54:02