代码之家  ›  专栏  ›  技术社区  ›  Ryan

Crystal Reports:需要关于如何避免使用子报表的建议吗

  •  1
  • Ryan  · 技术社区  · 15 年前

    我正试图写一个报告来访问一个非常大的数据库,这使得子报告的使用。。。不好说。在这种情况下,我如何避免它们:

    我从一张病人就诊表开始。每次就诊都可以有多个重要读数(比如在一个与就诊表多对一的‘重要’表中),我需要每种类型的最小值和最大值。为此,我按患者就诊分组,然后使用公式计算最小值/最大值,并在分组页脚中显示它们。到现在为止,一直都还不错。但是,还有另一个表Orders,它也包含了该次访问的所有订单,我还想选择一些最小/最大值来显示该遭遇。

    为了避免使用子报表,我在抑制的详细信息中添加了更多的公式,这些公式还可以找到这些顺序值的最小值/最大值,并显示在组页脚中。问题是Crystal只返回有医嘱的患者就诊(尽管是外部连接的),而我需要的是所有可能有或可能没有任何医嘱的就诊的列表。更复杂的是,还有一个订单表我也需要处理(一个用于药物,一个用于程序)。有什么想法吗?

    (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:
    |   ...
    +-----------------------------------------------
    1 回复  |  直到 15 年前
        1
  •  1
  •   John Hartsock    15 年前

    你需要展平你的数据集我建议从查询开始

    像这样的。注意:基本上,您使用union来分别查询到Detail表的每个连接。完成后,您可以按记录类型分组,并为记录类型组创建多个分区(4个分区)。每个分区都有一个抑制条件(例如,当记录类型<时,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