在报告中抑制不相邻的重复项

时间:2015-12-14 21:48:55

标签: sql sorting crystal-reports

我的Crystal Report中的医疗记录按此顺序排序:

...
Group 1: Score [Level of Risk]
  Group 2: Patient Name
...

由于患者在Score之前按Name排序,报告会为每位患者提供多个条目并且分数不同 - 由于重复的条目并不总是相邻,我无法使用{{ 1}}或Previous来压制它们。要解决此问题,我希望仅根据Next字段显示每位患者的最新条目,同时保持上述顺序。

我确信可以使用自定义SQL命令实现此行为,以便仅为每位患者提取最新条目,但自己创建该行为却没有成功。我怎样才能完成这种复合排序?

正在使用的当前SQL语句:

Assessment Date

1 个答案:

答案 0 :(得分:1)

下面的SQL代码可能不完全正确,具体取决于表的结构。以下代码假设“重复风险评分”来自RiskAssessment表。如果这不正确,可能需要更改代码。

基本上,我们创建一个派生表,并根据patientID创建一个row_number,并根据评估日期排序 - 最近的日期将具有最低的数字(1)。然后,在连接上,我们将结果集限制为仅选择记录#1(每个患者都有自己的排名#1)。

如果这不起作用,请告诉我并提供一些表格详细信息 - 工厂表应该作为起点吗? EpisodeSummary每个病人都有多个条目吗?谢谢!

SELECT es.PatientID
    ,es.Patient_Name
    ,es.Program_Value
    ,rrd.Rating_Period
    ,rrd.Assessment_Date
    ,rrd.Episode_Number
    ,rrd.PatientID
    ,f.Provider_Name
FROM SYSTEM.EpisodeSummary es
LEFT JOIN (
    --Derived Table retreiving highest risk score for each patient)
    SELECT PatientID
        ,Assessment_Date
        ,Episode_Number
        ,FacilityID
        ,Rating_Period
        ,ROW_NUMBER() OVER (
            PARTITION BY PatientID ORDER BY Assessment_Date DESC
            ) AS RN -- This code generates a row number for each record. The count is restarted for every patientID and the count starts at the most recent date.
    FROM RiskAssessment
    ) rrd
    ON es.patientID = rrd.patientid
        AND es.episode_number = rrd.episode_number
        AND es.facilityid = rrd.facilityid
        AND rrd.RN = 1 --This only retrieves one record per patient (the most recent date) from the riskassessment table 
INNER JOIN SYSTEM.Facility f
    ON es.facilityid = f.facilityid
WHERE rrd.PatientID IS NOT NULL
ORDER BY es.Program_Value
相关问题