【发布时间】:2016-11-08 22:50:20
【问题描述】:
我的报告仅根据date_of_diagnosis 显示每位患者的最新诊断 - 所有其他记录均被禁止:
我在交叉表中按诊断和年龄组进行总结。交叉表在打印之前进行评估,因此任何抑制、共享变量或汇总的尝试都会发生在交叉表填充之后。这意味着每个年龄组的总数是正确的,因为每个患者只有一个年龄 - 但如果患者有多个诊断,即使他们被抑制,他们也会被多次计算: p>
由于涉及大量诊断和年龄组,我绝对必须为此使用交叉表。如何让交叉表忽略隐藏的记录?或者如果我需要使用自定义的 SQL 命令表,如何重写现有的 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"
【问题讨论】:
-
只是说:如果您不使用被抑制的数据,那么也许您可以在查询中添加条件:
AND Date_Of_Diagnosis IS NOT NULL -
请注意:这不是一种实用的连接表格的方法,您应该尝试使用 LEFT 或 INNER JOIN
-
@Zeina(我知道。这只是 Crystal 自动生成的查询。如果我需要重写查询来解决这个问题,我将使用 Joins。)问题不在于当诊断日期为空,即诊断日期不是每位患者的最新诊断。交叉表忽略任何抑制。
-
您应该在数据库中创建一个视图来抑制所有患者的旧诊断,然后将其用作报告的来源。
-
您可以在 Crystal Report 中创建查询。检查this
标签: sql crystal-reports crosstab