2016-08-15 31 views
0

在下面,我们正在挑选所有看过博士的患者,但是我们从中删除了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 
+1

请提供一些示例数据,解释数据如何,现在来了和期望的行为 – techspider

回答

0

就拿出来,你筛选出四名医生的线,并在使用该行,而不是你的主要选择:

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

哦,我看,让我试试 –

+0

看到的问题是,这是可能的,你看到了4名医生之一,但也其中一个非4.因此,在那种情况下,你将属于另一位博士而不是142博士。 –

0

好像你已经结束了很多复杂的查询。你实际上不想限制你的约会的结果集,当你想要改变资源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