忽略交叉表中的抑制记录

Ignore suppressed records in crosstab

我的报告仅显示每位患者的 最新 诊断,基于他们的 date_of_diagnosis - 所有其他记录都被隐藏:

我在交叉表中按诊断和年龄组进行总结。交叉表在打印前计算,因此任何抑制、共享变量或汇总的尝试都会在交叉表填充后 发生。这意味着 每个年龄组的总数 是正确的,因为每个患者只有一个年龄 - 但如果患者有多个诊断,即使他们被抑制,他们也会被多次计算:

我绝对必须为此使用交叉表,因为涉及大量诊断和年龄组。我怎样才能让交叉表忽略被抑制的记录?或者,如果我需要使用自定义 SQL 命令 table,我该如何重写现有的 SQL 以忽略过时的记录?


Crystal 的自动生成的 SQL(通过 ODBC):

SELECT "Codes"."diagnosis_code",
       "Codes"."diagnosis_value",
       "Codes"."PATID",
       "Codes"."FACILITY",
       "Codes"."EPISODE_NUMBER",
       "Record"."date_of_diagnosis"

FROM   "SYSTEM"."Codes" "Codes",
       "SYSTEM"."Entry" "Entry",
       "SYSTEM"."Record" "Record"

WHERE  "Codes"."DiagnosisEntry"="Entry"."ID" AND
       "Codes"."EPISODE_NUMBER"="Entry"."EPISODE_NUMBER" AND
       "Codes"."FACILITY"="Entry"."FACILITY" AND
       "Codes"."PATID"="Entry"."PATID" AND
       "Entry"."DiagnosisRecord"="Record"."ID" AND
       "Entry"."EPISODE_NUMBER"="Record"."EPISODE_NUMBER" AND
       "Entry"."FACILITY"="Record"."FACILITY" AND
       "Entry"."PATID"="Record"."PATID"

您只需要一组诊断中的最新诊断即可。所以我建议:

SELECT "Codes"."PATID",
   "Codes"."diagnosis_code",
   "Codes"."diagnosis_value",
   "Codes"."FACILITY",
   "Codes"."EPISODE_NUMBER",
   "Record"."date_of_diagnosis"

FROM   "SYSTEM"."Codes" "Codes",
   "SYSTEM"."Entry" "Entry",
   "SYSTEM"."Record" "Record"

WHERE  "Codes"."DiagnosisEntry"="Entry"."ID" AND
   "Codes"."EPISODE_NUMBER"="Entry"."EPISODE_NUMBER" AND
   "Codes"."FACILITY"="Entry"."FACILITY" AND
   "Codes"."PATID"="Entry"."PATID" AND
   "Entry"."DiagnosisRecord"="Record"."ID" AND
   "Entry"."EPISODE_NUMBER"="Record"."EPISODE_NUMBER" AND
   "Entry"."FACILITY"="Record"."FACILITY" AND
   "Entry"."PATID"="Record"."PATID"
   AND "Entry"."date_of_diagnosis" = (SELECT MAX("date_of_diagnosis") FROM      
   "DiagonsisRecord" "A" WHERE "A"."DiagnosisRecord"="Entry"."DiagnosisRecord"  )

这应该为每个患者获取最大值 Date_of_Diagnosis 并通过过滤器参数以获得该患者的最后诊断。

基于 Muffaddal Shakir 的回答,我能够编写此查询来执行正确的过滤器:

SELECT "Codes"."PATID",
       "Codes"."diagnosis_code",
       "Codes"."diagnosis_value",
       "Codes"."FACILITY",
       "Codes"."EPISODE_NUMBER",
       "Record"."date_of_diagnosis"

FROM "SYSTEM"."codes" "Codes",
     "SYSTEM"."entry" "Entry",
     "SYSTEM"."record" "Record"

WHERE "Codes"."DiagnosisEntry"="Entry"."ID" AND
      "Codes"."EPISODE_NUMBER"="Entry"."EPISODE_NUMBER" AND
      "Codes"."FACILITY"="Entry"."FACILITY" AND
      "Codes"."PATID"="Entry"."PATID" AND
      "Entry"."DiagnosisRecord"="Record"."ID" AND
      "Entry"."EPISODE_NUMBER"="Record"."EPISODE_NUMBER" AND
      "Entry"."FACILITY"="Record"."FACILITY" AND
      "Entry"."PATID"="Record"."PATID"

AND "Record"."date_of_diagnosis" = (   
    SELECT MAX("Record2"."date_of_diagnosis")

    FROM "SYSTEM"."entry" "Entry2",
         "SYSTEM"."record" "Record2"

    WHERE "Entry2"."DiagnosisRecord"="Record2"."ID" AND
          "Entry2"."EPISODE_NUMBER"="Record2"."EPISODE_NUMBER" AND
          "Entry2"."FACILITY"="Record2"."FACILITY" AND
          "Entry2"."PATID"="Record2"."PATID" AND
          "Record"."PATID"="Record2"."PATID"
)

主要区别在于:

  1. 子查询使用主查询的唯一别名。
  2. 最后一行"Record"."PATID"="Record2"."PATID" - 如果没有这个,查询只会拉回一个诊断(整个系统中最新的一个。)但现在它会检查最新诊断每人.