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

根据关联列值动态包含/排除列的T-SQL查询修改需求

动态调整非空列统计的T-SQL解决方案

嘿,我来帮你搞定这个动态统计的需求!根据你给出的规则,我们可以通过在CROSS APPLY中加入条件判断,结合主表的字段值来动态决定是否包含指定列,同时保证统计的列数和占比计算准确。

修改后的查询代码如下:

SELECT 
    COUNT(v.col) AS num_not_null,
    CASE WHEN SUM(v.col_count) = 0 THEN 0 ELSE COUNT(v.col) * 1.0 / SUM(v.col_count) * 100 END AS percent_not_null,
    SUM(v.col_count) AS toltalColsNeedsFilled
FROM EFP_EmploymentUser t
CROSS APPLY (VALUES
    -- 固定要统计的列
    (t.ITAdvicedFirst, 1),
    (t.ITAdvicedSecond, 1),
    (t.ITDepartmentDone, 1),
    (t.CFOAdvicedFirst, 1),
    (t.CFOInfoProvided, 1),
    (t.CFOAdvicedSecond, 1),
    (t.CFODone, 1),
    (t.EconomyAdviced, 1),
    (t.EconomyDone, 1),
    (t.WhoIsWhoAdviced, 1),
    (t.WhoIsWhoDone, 1),
    (t.KeyCardAdviced, 1),
    (t.KeyCardDone, 1),
    -- 动态列:Academy相关
    (CASE WHEN t.Academy = 'yes' THEN t.AcademyAdviced ELSE NULL END, CASE WHEN t.Academy = 'yes' THEN 1 ELSE 0 END),
    (CASE WHEN t.Academy = 'yes' THEN t.AcademyDone ELSE NULL END, CASE WHEN t.Academy = 'yes' THEN 1 ELSE 0 END),
    -- 动态列:Publicator相关
    (CASE WHEN t.Publicator = 'yes' THEN t.PublicatorDone ELSE NULL END, CASE WHEN t.Publicator = 'yes' THEN 1 ELSE 0 END),
    (CASE WHEN t.Publicator = 'yes' THEN t.PortraitAdviced ELSE NULL END, CASE WHEN t.Publicator = 'yes' THEN 1 ELSE 0 END),
    -- 动态列:Bogportal相关
    (CASE WHEN t.Bogportal = 'yes' THEN t.BogportalAdviced ELSE NULL END, CASE WHEN t.Bogportal = 'yes' THEN 1 ELSE 0 END),
    (CASE WHEN t.Bogportal = 'yes' THEN t.BogportalDone ELSE NULL END, CASE WHEN t.Bogportal = 'yes' THEN 1 ELSE 0 END)
) v(col, col_count)
WHERE ID = '19';

思路说明:

  • 动态包含列:对每个需要条件判断的列,用CASE语句——当对应字段(如Academy)为'yes'时返回原列值,否则返回NULL。这样COUNT(v.col)会自动忽略NULL值,相当于排除了不满足条件的列。
  • 动态计算总列数:新增col_count字段,满足条件时标记为1,否则为0。通过SUM(v.col_count)就能得到当前需要统计的总列数,替代原来固定的COUNT(*)。
  • 占比计算优化:加入CASE判断避免除以0的异常情况(当所有动态列都不满足且固定列也全为空时)。

这样修改后,查询会根据Academy、Publicator、Bogportal的取值自动调整统计范围,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:23:34