我正在尝试编写一个报告来访问一个非常大的数据库,这使得使用子报告......至少可以说是令人不快的。在这种情况下如何避免它们:
我从患者就诊表开始。每次访问都可以有多个重要的读数(在'Vitals'表中与访问表多对一说)我想要每种类型的最小值和最大值。因此,为了实现这一点,我按患者访问进行分组,然后使用公式计算最小值/最大值并将其显示在组页脚中。到现在为止还挺好。但是,还有另一个表Orders,它包含该访问的所有订单,其中我还想选择一些最小/最大值来显示该遭遇。
为了使用子报表,我在抑制的细节中添加了一些公式,这些公式也找到了这些订单值的最小值/最大值并显示在组页脚中。问题是Crystal只返回有订单的患者访问(尽管是外部加入的),我需要的是所有访问的列表,可能有也可能没有任何订单。更复杂的是,还有另一个Orders表我也需要这样做(一个用于药物,一个用于程序)。有什么想法吗?
(visitID, patName, visitDate)
------------------------------------------------------------------
1, Patient A, July-24-2009
2, Patient B, July-25-2009
(visitID, line, medName, dosage)
------------------------------------------------------------------
1, 1, Aspirin, 200mg
1, 2, Aspirin, 500mg
2, 1, Codeine, 100mg
2, 2, Codeine, 200mg
2, 3, ValerianCap, 700mg
(visitID, line, procName, procType, cost)
------------------------------------------------------------------
1, 1, Xray-wrist, xray, $500
1, 2, Xray-elbow, xray, $300
+-----------------------------------------------
| Patient A
| Med Orders:
| Max Aspirin Dosage: 500mg
|
| Proc. Orders:
| Max cost Xray: $500
|
+-----------------------------------------------
| Patient B
| Med Orders:
| ...
+-----------------------------------------------
答案 0 :(得分:1)
您需要展平我建议从查询开始的数据集
像这样的东西。请注意,您基本上使用union来分别查询Detail表中的每个连接。完成时,您可以按记录类型分组并为记录类型组创建多个部分(4个部分)每个部分都将具有抑制条件(示例Vitals部分将在RecordType<> Vitals时禁用。)现在基本上您已创建组子报告。
SELECT
'Vitals' As RecordType,
Vitals.*,
--Fields For Orders,
--Fields For Medications,
--Fields For Procedures
FROM Visits
LEFT JOIN Vitals ON Vitals.VisitId = Visits.VisitId
UNION ALL
SELECT
'Orders' As RecordType,
--Fields for Vitals,
Orders.*,
--Fields For Medications,
--Fields For Procedures
FROM Visits
LEFT JOIN Orders ON Orders.VisitId = Visits.VisitId
UNION ALL
SELECT
'Medications' As RecordType,
--Fields for Vitals,
--Fields For Orders,
Medications.*,
--Fields For Procedures
FROM Visits
LEFT JOIN Medications ON Medications.VisitId = Visits.VisitId
UNION ALL
SELECT
'Procedures' As RecordType,
--Fields For Vitals,
--Fields For Orders,
--Fields For Medications,
Procedures.*
FROM Visits
LEFT JOIN Procedures ON Procedures.VisitId = Visits.VisitId