【问题标题】:Need to handle the rows that don't get picked需要处理未被选中的行
【发布时间】:2016-08-15 18:45:33
【问题描述】:

在下文中,我们将挑选所有看过医生的患者,但我们从中删除了 4 名医生,因为他们不再在我们的设施中。这里的问题是,如果患者只看过这 4 位医生,他们将不会被选中。事实上,我们想将它们分配给b.Appt_resource_id = 142。我怎么能把这样的病人也包括在内?我们从这个 sql 得到的数据是这样的:

    110811      737470                  Mirta  AVostaquishpe        19  

    102028      664770                  Brune  Alexgdre     19  

    70038       361830                  Pala  Avtila        19  

    44684       112740                  Nani  Verez     19  

    71939       382620                  Alex  Voachim       19  

您可以看到每个患者都通过这个 b.Appt_Resource_ID 分配给了一个医生。但这排除了那些只看过现在离开设施的 4 位医生的病人。如何包含它们并将它们分配给 b.appt_resource_id= 142。

SELECT DISTINCT
    A.Patient_id,
    P.Patient_name,
    P.Patient_Last_Name,
    A.Patient_number,
    b.Appt_resource_id,
    b.appt_resource_descr 
FROM
    [PM].[vwGenPatApptInfo] A
INNER JOIN 
(
    SELECT TOP 100 PERCENT
        patient_id,
        Appt_resource_id,
        appt_resource_descr, 
        COUNT(Appt_resource_id) AS DR_count,
        ROW_NUMBER() OVER (PARTITION BY patient_id ORDER BY COUNT(*) DESC) AS seqnum
    FROM
        [PM].[vwGenPatApptInfo]
    WHERE
        Patient_ID IS NOT NULL AND
        Appt_Sched_Department_ID = 2 AND
        Appt_resource_id not IN (115, 123, 94, 109)
    GROUP BY
        patient_id,
        Appt_resource_id,
        appt_resource_descr
    ORDER BY
        patient_id,
        seqnum 
    ) B
    ON B.Patient_ID = A.Patient_ID  
    AND B.seqnum = 1 
INNER JOIN
    [PM].[vwGenPatInfo] P 
    ON A.Patient_id = P.Patient_id
WHERE
    A.Appt_Cancelled_Date IS NULL AND
    A.Appt_Noshow_date IS NULL

【问题讨论】:

  • 请提供一些示例数据,说明数据是如何出现的以及期望的行为

标签: sql sql-server


【解决方案1】:

取出您过滤掉四位医生的行,并在您的主 SELECT 中使用此行:

CASE 
   WHEN b.Appt_resource_id IN (115, 123, 94, 109) THEN 142 
   ELSE b.Appt_resource_id 
END AS Appt_resource_id

【讨论】:

  • 哦,我明白了,让我试试吧
  • 看到问题是,您可能看到了 4 位医生中的一位,但也看到了非 4 位医生中的一位。所以在这种情况下,您将属于另一位博士而不是 142 博士。
【解决方案2】:

似乎您的查询过于复杂了。您实际上不想限制约会的结果集,您只想在资源 ID 在某些值范围内时更改它,我想我也会质疑,因为您可能想知道他们看过多少不同的医生。为此,您可以使用 case 语句。

这是一个查询,用于获取符合条件的患者列表,其中包括医生(4 名更改为 1 名)和预约。获取所有约会详细信息将是一种不同类型的查询,但可行,因此如果您希望这样做,请告诉我们。

SELECT
    p.Patient_id
    ,P.Patient_name
    ,P.Patient_Last_Name
    ,COUNT(DISTINCT CASE WHEN a.Appt_resource_id IN (115, 123, 94, 109) THEN 142 ELSE a.Appt_resource_id END) as DistinctDrCount
    ,COUNT(DISTINCT a.Appt_resource_id) as ActualUnAlteredDrCount
    ,COUNT(*) as NumOfAppointments
FROM
    [vwGenPatApptInfo] a
    INNER JOIN [PM].[vwGenPatInfo] P 
    ON A.Patient_id = P.Patient_id
WHERE
    A.Appt_Cancelled_Date IS NULL AND
    A.Appt_Noshow_date IS NULL
GROUP BY
    p.Patient_id
    ,P.Patient_name
    ,P.Patient_Last_Name

【讨论】:

    猜你喜欢
    • 2018-08-02
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 2020-09-24
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多