2012-11-20 20 views
2

我已經在這裏得到這個代碼,你可以從我的僞代碼就是我試圖完成瞭解情況表達「去哪兒」條款

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. 

我能做些什麼讓我想要的效果看在括號內?如果Coverage Level = 4,那麼我不在乎Dependents.IsSpouse是什麼,我甚至不需要再去分類。

回答

7

假設isSpouse只能是01 ...如果CoverageLevels.Level4,然後比較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 

或者,這也可以不表達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 
    ) 
+0

打了我一整分鐘:(好的解決方案 –