【发布时间】:2021-10-11 04:06:36
【问题描述】:
我需要在具有 3 个条件的案例语句中编写一个案例。
当 A=B
当A>B
当A
当我执行查询时,我只得到 A=B 的结果。
有 A>B 和 A
CASE WHEN A = B THEN
CASE WHEN VALUE_In_A IN (1,2,3) THEN 'Do something'
CASE WHEN VALUE_In_B IN (5,6,7) THEN 'Do something'
ELSE
CASE WHEN A > B THEN
CASE WHEN VALUE_In_A IN (1,2,3) THEN 'Do something'
CASE WHEN VALUE_In_A IN (5,5,6) THEN 'Do something'
ELSE
CASE WHEN A < B THEN
CASE WHEN VALUE_In_B IN (1,2,3) THEN 'Do something'
CASE WHEN VALUE_In_B IN (5,5,6) THEN 'Do something'
END END
具体代码如下
这里的全部目的是:
如果 jdGroupCode = emGradeCode,则返回 emGradeCode
如果 jdGroupCode > emGradeCode,返回 emGradeCode
如果 jdGroupCode
case when jdGradeCode = emp.emGradeCode
then
case when emp.emGradeCode in ('1','2','3') then 'Unskilled'
when EMP.emGradeCode in ('4','5','6','7') then 'Semi-Skilled'
when EMP.emGradeCode in ('8','9','10','11','12','13') then 'Junior Management (Sklled & Academically Qual)'
when EMP.emGradeCode in ('14','15','16','17') then 'Middle Management (Prof Qual)'
when EMP.emGradeCode in ('18','19','20','21') then 'Senior Management'
when EMP.emGradeCode in ('22','23','24','25') then 'Top Management'
else
case when jdGradeCode > emp.emGradeCode then
case when EMP.emGradeCode in ('1','2','3') then 'Unskilled'
when EMP.emGradeCode in ('4','5','6','7') then 'Semi-Skilled'
when EMP.emGradeCode in ('8','9','10','11','12','13') then 'Junior Management (Sklled & Academically Qual)'
when EMP.emGradeCode in ('14','15','16','17') then 'Middle Management (Prof Qual)'
when EMP.emGradeCode in ('18','19','20','21') then 'Senior Management'
when EMP.emGradeCode in ('22','23','24','25') then 'Top Management'
else
case when jdGradeCode < emp.emGradeCode then
case when jdGradeCode in ('1','2','3') then 'Unskilled'
when jdGradeCode in ('4','5','6','7') then 'Semi-Skilled'
when jdGradeCode in ('8','9','10','11','12','13') then 'Junior Management (Sklled & Academically Qual)'
when jdGradeCode in ('14','15','16','17') then 'Middle Management (Prof Qual)'
when jdGradeCode in ('18','19','20','21') then 'Senior Management'
when jdGradeCode in ('22','23','24','25') then 'Top Management'
end end end end end end,
【问题讨论】:
-
VALUE_In_A和VALUE_In_B是表中的其他列还是您的意思是 A 和 B? -
此查询无法编译 - 您有 9 个
CASE实例,只有两个END实例。您能否发布您实际执行的查询结果不正确而不是伪代码? -
@GarethD 我已经粘贴了我执行的确切代码
-
@forpas 添加了确切的代码
-
你的嵌套层级错了,你基本上有
CASE WHEN jdGradeCode = emp.emGradeCode THEN <all your logic> END。因此,如果不满足此初始条件,您将无法到达 case 表达式的任何其他部分。你最喜欢想要CASE WHEN jdGradeCode = emp.emGradeCode THEN ... WHEN jdGradeCode < emp.emGradeCode THEN ... ELSE ... END。您会发现使用良好的缩进并确保您的CASE与您的END对齐将真正有助于发现此类问题。
标签: sql-server tsql case