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.

括弧内で希望する効果を得るにはどうすればよいですか? カバレッジ レベル = 4 の場合、Dependents.IsSpouse が何であるかは気にしません。それで並べ替える必要さえありません。

4

1 に答える 1

7

isSpouseそれが0または1...であると仮定するとCoverageLevels.Level、それ自体と4比較すると、常に次のようになります。isSpousetrue

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
    )
于 2012-11-20T22:07:32.953 に答える