0

この質問で説明されているのと同じクエリから作業しています: Diagnosis in One Horizo​​ntal Row。診断データが水平になり、アクティブな認知症の人を除外したいと考えています (診断ステータスは診断ごとに示されます)。1 人あたりの診断の最大数は 50 であるため、18 の異なる ICD9 コード (認知症を示す) のそれぞれについて、50 の ICD9 コード フィールドのそれぞれを検索する必要があります。18 個のコードのそれぞれを @ICD9Code49 - @ICD9Code66 として宣言しましたが、これらをデータ セットから除外する方法がわかりません。私は以下を試しました(ProblemStatusは診断ステータスです):

SELECT * FROM Diagnosis
WHERE
(
([ProblemStatus_1] = @ProblemStatus AND (ICD9Code_1 <> @ICD9Code49 OR ICD9Code_1 <> @ICD9Code50 OR ICD9Code_1 <> @ICD9Code51 OR ICD9Code_1 <> @ICD9Code52 OR ICD9Code_1 <> @ICD9Code53 OR ICD9Code_1 <> @ICD9Code54 OR ICD9Code_1 <> @ICD9Code55 OR ICD9Code_1 <> @ICD9Code56 OR ICD9Code_1 <> @ICD9Code57 OR ICD9Code_1 <> @ICD9Code58 OR ICD9Code_1 <> @ICD9Code59 OR ICD9Code_1 <> @ICD9Code60 OR ICD9Code_1 <> @ICD9Code61 OR ICD9Code_1 <> @ICD9Code62 OR ICD9Code_1 <> @ICD9Code63 OR ICD9Code_1 <> @ICD9Code64 OR ICD9Code_1 <> @ICD9Code65 OR ICD9Code_1 <> @ICD9Code66))
AND ([ProblemStatus_2] = @ProblemStatus AND (ICD9Code_2 <> @ICD9Code49 OR ICD9Code_2 <> @ICD9Code50 OR ICD9Code_2 <> @ICD9Code51 OR ICD9Code_2 <> @ICD9Code52 OR ICD9Code_2 <> @ICD9Code53 OR ICD9Code_2 <> @ICD9Code54 OR ICD9Code_2 <> @ICD9Code55 OR ICD9Code_2 <> @ICD9Code56 OR ICD9Code_2 <> @ICD9Code57 OR ICD9Code_2 <> @ICD9Code58 OR ICD9Code_2 <> @ICD9Code59 OR ICD9Code_2 <> @ICD9Code60 OR ICD9Code_2 <> @ICD9Code61 OR ICD9Code_2 <> @ICD9Code62 OR ICD9Code_2 <> @ICD9Code63 OR ICD9Code_2 <> @ICD9Code64 OR ICD9Code_2 <> @ICD9Code65 OR ICD9Code_2 <> @ICD9Code66))
AND ([ProblemStatus_3] = @ProblemStatus AND (ICD9Code_3 <> @ICD9Code49 OR ICD9Code_3 <> @ICD9Code50 OR ICD9Code_3 <> @ICD9Code51 OR ICD9Code_3 <> @ICD9Code52 OR ICD9Code_3 <> @ICD9Code53 OR ICD9Code_3 <> @ICD9Code54 OR ICD9Code_3 <> @ICD9Code55 OR ICD9Code_3 <> @ICD9Code56 OR ICD9Code_3 <> @ICD9Code57 OR ICD9Code_3 <> @ICD9Code58 OR ICD9Code_3 <> @ICD9Code59 OR ICD9Code_3 <> @ICD9Code60 OR ICD9Code_3 <> @ICD9Code61 OR ICD9Code_3 <> @ICD9Code62 OR ICD9Code_3 <> @ICD9Code63 OR ICD9Code_3 <> @ICD9Code64 OR ICD9Code_3 <> @ICD9Code65 OR ICD9Code_3 <> @ICD9Code66))
)

AND と OR のさまざまな組み合わせを試しましたが、うまくいかないようです。

4

1 に答える 1

1

これは、次の場合に最適ですNOT IN

with dementiaCodes as (
    select @ICD9Code49 as code
    union all select @ICD9Code50
    union all select @ICD9Code51
    ...
)
SELECT * FROM Diagnosis
WHERE
NOT ((ProblemStatus_1 = @ProblemStatus AND ICD9Code_1 IN (select code from dementiaCodes))
    OR (ProblemStatus_2 = @ProblemStatus AND ICD9Code_2 IN (select code from dementiaCodes))
    OR (ProblemStatus_3 = @ProblemStatus AND ICD9Code_3 IN (select code from dementiaCodes)))
于 2013-07-24T04:27:19.550 に答える