在下文中,我们正在挑选所有看过博士的患者,但我们将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
答案 0 :(得分:0)
取出过滤掉四位医生的行,然后在主SELECT中使用此行:
CASE
WHEN b.Appt_resource_id IN (115, 123, 94, 109) THEN 142
ELSE b.Appt_resource_id
END AS Appt_resource_id
答案 1 :(得分:0)
看起来你已经过多地复杂了你的查询。你实际上不想限制你的约会的结果集,你只想在资源ID落在某个值内时更改它,我想也会质疑,因为你可能想知道他们看到了多少不同的医生。为此,您可以使用案例陈述。
这是一个查询,以获得满足计算医生(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