2016-08-15 34 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