You need to enable JavaScript to run this app. 如何将多条统计计数的SQL Update语句合并为单条更新#tbl_rprt的语句
优惠活动
大模型
产品
解决方案
定价
更多

如何将多条统计计数的SQL Update语句合并为单条更新#tbl_rprt的语句

完全可以合并为单条UPDATE语句实现相同效果,且执行效率远高于原有多条UPDATE写法

合并后SQL实现

UPDATE #tbl_rprt
SET 
    a_count = a.a_count,
    b_count = a.b_count,
    c_count = a.c_count,
    d_count = a.d_count,
    e_count = a.e_count
FROM (
    SELECT 
        new_c1,
        new_c2,
        COUNT(CASE WHEN a_flg = 'Y' THEN 1 END) AS a_count,
        COUNT(CASE WHEN b_flg = 'Y' THEN 1 END) AS b_count,
        COUNT(CASE WHEN c_flg = 'Y' THEN 1 END) AS c_count,
        COUNT(CASE WHEN d_flg = 'Y' THEN 1 END) AS d_count,
        COUNT(CASE WHEN e_flg = 'Y' THEN 1 END) AS e_count
    FROM wrk_tbl_flgs
    GROUP BY new_c1, new_c2
) a
WHERE a.new_c1 = #tbl_rprt.class 
  AND a.new_c2 = #tbl_rprt.rm

逻辑说明

  • 核心采用条件聚合逻辑:通过CASE WHEN判断对应标识是否为'Y',符合条件则返回非NULL值,COUNT函数仅统计非NULL值,仅需扫描一次wrk_tbl_flgs表即可计算出所有标识的分类计数,避免原有写法多次重复扫描表的性能损耗,数据量越大性能提升越明显。
  • 关联更新逻辑和原有多条UPDATE完全一致,统计结果和旧逻辑匹配。
  • 若需完全对齐原有逻辑(即无对应'Y'记录的分组保留#tbl_rprt字段原有值,而非覆盖为0),可将SET部分的赋值调整为如下形式:
    a_count = COALESCE(a.a_count, #tbl_rprt.a_count),
    b_count = COALESCE(a.b_count, #tbl_rprt.b_count),
    -- 其余字段按相同规则调整即可
    
  • 如果你使用的数据库支持FILTER语法(如PostgreSQL),还可以将计数逻辑简化为COUNT(*) FILTER (WHERE a_flg = 'Y') AS a_count,可读性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 20:06:06