[英]Understanding case expression in the “Where” clause
I've got this code here and you can see from my Pseudocode what I'm trying to accomplish 我在这里有这个代码,你可以从我的伪代码中看到我正在努力实现的目标
select *
from dbo.BenefitsForms
inner join Dependents on BenefitsForms.UserId = Dependents.BenefitsForm_UserId
inner join CoverageLevels on BenefitsForms.MedicalId = CoverageLevels.Id
where (BenefitsForms.MedicalId > 0 AND BenefitsForms.MedicalId < 13)
AND Dependents.IsSpouse = CASE when CoverageLevels.[Level] = 2 then 1
when CoverageLevels.[Level] = 3 then 0 end
when CoverageLevels.[Level] = 4 then [any, it doesnt matter] <--- my desire but it doesn't work.
What can I do to get the effect I desire in the brackets? 我怎样才能在括号中获得我想要的效果? If Coverage Level = 4 then I don't care what Dependents.IsSpouse is, I don't even need to sort by it anymore.
如果Coverage Level = 4那么我不关心Dependents.IsSpouse是什么,我甚至不需要再按它排序了。
Assuming that isSpouse
can only be 0
or 1
... if CoverageLevels.Level
is 4
, then compare isSpouse
to itself, which will always result in true
: 假设
isSpouse
只能是0
或1
...如果CoverageLevels.Level
是4
,那么将isSpouse
自身进行比较,这将始终为true
:
AND Dependents.IsSpouse = CASE
when CoverageLevels.[Level] = 2 then 1
when CoverageLevels.[Level] = 3 then 0
when CoverageLevels.[Level] = 4 then Dependents.IsSpouse
END
Alternately, this can also be expressed without the CASE
: 或者,也可以不使用
CASE
来表示:
WHERE
BenefitsForms.MedicalId > 0
AND BenefitsForms.MedicalId < 13
AND (
(Dependents.IsSpouse = 1 AND CoverageLevels.[Level] = 2)
OR (Dependents.IsSpouse = 0 AND CoverageLevels.[Level] = 3)
OR CoverageLevels.[Level] = 4
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.