Case 表达式只能嵌套到 SQL 查询中的 10 级错误

Case expressions may only be nested to level 10 error in SQL query

我在服务器 1 上有原始查询,需要在服务器 2 上创建它。我能够创建视图,但在执行它时,我在 CASE 语句中遇到错误,如下所示:

Error:

    Msg 8180, Level 16, State 1, Line 1
    Statement(s) could not be prepared.
    Msg 102, Level 15, State 1, Line 1
    Incorrect syntax near 'Qry1097'.
    Msg 125, Level 15, State 4, Line 1
    Case expressions may only be nested to level 10.

查询: SELECT

ID, Forename, Surname, 

Code, Description, 

Grade, Dept,

Course, Title, 

CASE WHEN Code IN ('VJ028') THEN 'FUNCTIONAL SKILLS - LEVEL 1 & LEVEL 2' 

WHEN Code IN ('VE203', '22877C')  THEN 'WRITING - LEVEL 2' 

WHEN Code IN ('VE202', 'VE201')  THEN 'READING - LEVEL 2' 

WHEN Code = 'VE201'  THEN 'SPEAKING & LISTENING' 

WHEN Code = 'RU243'  THEN 'ENTRY LEVEL' 

WHEN Code IN ('22875C') THEN 'E2 FUNCTIONAL SKILLS SPEAKING & LISTENING' 

WHEN Code IN ('22876C', '22879C')  THEN 'E2 FUNCTIONAL SKILLS READING'  

WHEN Code = '22877C'  THEN 'E2 FUNCTIONAL SKILLS WRITING'  

WHEN Code = '22878C'  THEN 'E3 FUNCTIONAL SKILLS SPEAKING & LISTENING' 

WHEN Code = '22880C'  THEN 'E3 FUNCTIONAL SKILLS WRITING'  

WHEN Code= '22879C' THEN  'E3 FUNCTIONAL SKILLS READING' 

WHEN Code = 'VE102'  THEN 'READING-LEVEL 1' 

WHEN Code = 'VE103'  THEN 'WRITING-LEVEL 1' 

WHEN Code = '3748-01'  THEN 'FUNCTIONAL SKILLS ENGLISH' 

WHEN Code = 'VE101'  THEN 'SPEAKING & LISTENING-LEVEL 1'

END AS SubjectCode,

CASE 

WHEN Description = 'FUNCTIONAL SKILLS - ENGLISH (LEVEL 1 & LEVEL  2)' THEN 'Overall'

WHEN Description = 'ENGLISH (ENTRY LEVEL)' THEN 'Overall'

WHEN Description = 'FUNCTIONAL SKILLS ENGLISH' THEN 'Overall'

WHEN Description = 'READING -ENGLISH LEVEL 2' THEN 'Reading'

WHEN Description = 'READING- ENGLISH (LEVEL 1 )' THEN 'Reading'

WHEN Description = 'E2 ENGLISH FUNTIONAL SKILLS READING' THEN 'Reading'

WHEN Description = 'E3 ENGLISH FUNTIONAL SKILLS READING' THEN 'Reading'

WHEN Description = 'WRITING- ENGLISH (LEVEL 1 )' THEN 'Writing'

WHEN Description = 'WRITING- ENGLISH LEVEL  2' THEN 'Writing'

WHEN Description = 'E2 ENGLISH FUNCTIONAL SKILLS WRITING' THEN 'Writing'

WHEN Description = 'E3 ENGLISH FUNCTIONAL SKILLS WRITING' THEN 'Writing'

WHEN Description = 'SPEAKING & LISTENING- ENGLISH LEVEL 2' THEN 'Speaking & Listening'

WHEN Description = 'SPEAKING & LISTENING- ENGLISH (LEVEL 1)' THEN 'Speaking & Listening'

WHEN Description = 'E3 ENGLISH FUNCTIONAL SKILLS SPEAKING AND LISTENING' THEN 'Speaking & Listening'

WHEN Description = 'E2 ENGLISH FUNCTIONAL SKILLS SPEAKING AND LISTENING' THEN 'Speaking & Listening'

END AS CourseType,


CASE WHEN Act_Grade  = 'PA' THEN 'Pass'

WHEN e.EXSS_Act_Grade = 'FL'  THEN 'Fail'

WHEN e.EXSS_Act_Grade = 'XA'  THEN 'Not Attended'

END AS Grade

FROM Table

错误:

Case 表达式只能嵌套到第 10 层。

我该如何纠正这个问题?

解析器看不到超过 10 级深度的嵌套 CASE 语句(尽管它确实将一个语句传递给本地查询编译的后期阶段)。

虽然可能的解决方法可能是这样的:

SELECT COALESCE(
CASE SUBSTRING(p.Name, 1, 1)
    WHEN 'a' THEN '1' 
    WHEN 'b' THEN '2' 
    WHEN 'c' THEN '3' 
    WHEN 'd' THEN '4' 
    WHEN 'e' THEN '5' 
    WHEN 'f' THEN '6' 
    WHEN 'g' THEN '7' 
    WHEN 'h' THEN '8' 
    WHEN 'i' THEN '9' 
    ELSE NULL
END,
CASE SUBSTRING(p.Name, 1, 1)
    WHEN 'j' THEN '10' 
    WHEN 'k' THEN '11'  
END)
FROM dbo.AdventureWorks.Sample AS p

https://dba.stackexchange.com/questions/42837/why-do-linked-servers-have-a-limitation-of-10-branches-in-a-case-expression

如果值是数字,另一种解决方法是简单地将多个 case 语句相加。请参阅下面的示例。

select 
case when @Period=1 then Bal01 else 0 end +
case when @Period=2 then Bal02 else 0 end +
case when @Period=3 then Bal03 else 0 end +
case when @Period=4 then Bal04 else 0 end +
case when @Period=5 then Bal05 else 0 end +
case when @Period=6 then Bal06 else 0 end +
case when @Period=7 then Bal07 else 0 end +
case when @Period=8 then Bal08 else 0 end +
case when @Period=9 then Bal09 else 0 end +
case when @Period=10 then Bal10 else 0 end +
case when @Period=11 then Bal11 else  0 end +
case when @Period=12 then Bal12 else  0 end 

from VendorHistory
where Vendor = 'Staples'