0

我正在使用与此问题中解释的相同查询:诊断在一个水平行中。诊断数据现在是水平的,我想排除那些患有活动性痴呆的人(每个诊断都会显示诊断状态)。每人的最大诊断数为 50,因此我必须在 50 个 ICD9 代码字段中的每一个字段中搜索 18 个不同的 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 回答