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

SQL嵌套IIf仅支持10级时多流程映射字段创建问题咨询

问题根因

你使用的T-SQL语法中,嵌套IIF函数本质是嵌套CASE表达式,SQL Server对这类嵌套表达式的深度限制为最高10层,超过20个映射规则必然触发Case expressions may only be nested to level 10报错。

解决方案

这里提供两种无嵌套限制的改造方案,都可以支持超过20个映射规则:

方案1:平级CASE WHEN改造

将嵌套IIF直接替换为平级的CASE WHEN结构,无需嵌套,支持任意数量的分支判断,改造后仅需修改原CROSS APPLY生成Missions的逻辑即可:

select Missions, Sum(Morning) Morning, Sum(PM) PM, Sum(Night) Night, count(*) Total
from [dbo].[VIEW_JOBS_FINISHED_ALL]
cross apply (values (
    CASE
        WHEN QUELLE in ('Réception_14','Réception_21') THEN 'M1'
        WHEN QUELLE in ('Réception_17','Réception_16') THEN 'M2'
        WHEN QUELLE in ('Réception_13','Réception_19') THEN 'M3'
        WHEN QUELLE in ('Réception_15','Réception_25') THEN 'M4'
        -- 此处按你的实际规则继续添加更多WHEN分支即可,无数量限制
        WHEN QUELLE in ('Réception_15','Réception_25') THEN 'M5'
        WHEN QUELLE in ('Réception_15','Réception_25') THEN 'M6'
        WHEN QUELLE in ('Réception_15','Réception_25') THEN 'M7'
        WHEN QUELLE in ('Réception_15','Réception_25') THEN 'M8'
        WHEN QUELLE in ('Réception_15','Réception_25') THEN 'M9'
        WHEN QUELLE in ('Réception_15','Réception_25') THEN 'M10'
        WHEN QUELLE in ('Réception_15','Réception_25') THEN 'M11'
        ELSE 'M28'
    END
))f(Missions)
cross apply (values ( [START_DATE] ))v(T)
cross apply
(   
    values (convert(datetime, convert(date, getdate())),
            convert(datetime, convert(date, getdate() - 1)))
) dates (today, yesterday)
cross apply
(
    values (dateadd(hour, 6, yesterday), 
            dateadd(hour, 14, yesterday), 
            dateadd(hour, 21, yesterday), 
            dateadd(hour, 6, today))
) dt (y6, y11, y22, t6)
cross apply (
    select
        case when T >= y6 and T < y11 then 1 else 0 end Morning,
        case when T >=y11 and T < y22 then 1 else 0 end PM,
        case when T >=y22 and T < t6 then 1 else 0 end Night
)c
group by Missions

方案2:虚拟映射表匹配(更推荐)

如果后续映射规则还会新增,推荐把所有映射规则单独抽成虚拟表,后续加规则仅需新增映射行即可,无需修改判断逻辑:

select final_missions as Missions, Sum(Morning) Morning, Sum(PM) PM, Sum(Night) Night, count(*) Total
from [dbo].[VIEW_JOBS_FINISHED_ALL]
-- 所有映射规则统一定义在此处,支持任意数量新增
left join (values
    ('Réception_14','M1'),
    ('Réception_21','M1'),
    ('Réception_17','M2'),
    ('Réception_16','M2'),
    ('Réception_13','M3'),
    ('Réception_19','M3'),
    ('Réception_15','M4'),
    ('Réception_25','M4')
    -- 继续添加其余的QUELLE到Missions的映射即可
) map(QUELLE_VAL, Missions) on QUELLE = map.QUELLE_VAL
-- 未匹配到规则的默认赋值为M28
cross apply (values (ISNULL(Missions, 'M28'))) f(final_missions)
cross apply (values ( [START_DATE] ))v(T)
cross apply
(   
    values (convert(datetime, convert(date, getdate())),
            convert(datetime, convert(date, getdate() - 1)))
) dates (today, yesterday)
cross apply
(
    values (dateadd(hour, 6, yesterday), 
            dateadd(hour, 14, yesterday), 
            dateadd(hour, 21, yesterday), 
            dateadd(hour, 6, today))
) dt (y6, y11, y22, t6)
cross apply (
    select
        case when T >= y6 and T < y11 then 1 else 0 end Morning,
        case when T >=y11 and T < y22 then 1 else 0 end PM,
        case when T >=y22 and T < t6 then 1 else 0 end Night
)c
group by final_missions

注意:你原代码中M4到M11的QUELLE判断条件均重复写为('Réception_15','Réception_25'),替换为你实际的业务规则即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:27:06