如果找不到以下条件的行,我想返回0。
SELECT P.externalid,
Count(DISTINCT Pp.patientuid) patcount
FROM PatientProcedure Pp (nolock )
INNER JOIN visit Temp (nolock )
ON Temp.patientuid = Pp.patientuid
AND (Pp.effectivedate = Temp.VisitDate)
AND Temp.RenderringProviderUid = Pp.serviceprovideruid
AND Temp.VisitDate >= '07-01-2013'
AND Temp.VisitDate <= '06-30-2014'
INNER JOIN serviceprovider Sp (nolock )
ON Pp.serviceprovideruid = Sp.serviceprovideruid
AND Sp.inactive = 0
INNER JOIN MasterCode Mc (nolock )
ON Mc.codeuid = Pp.procedurecodeuid
INNER JOIN MasterCodeSet Mcs (nolock )
ON Mcs.Value = Mc.code
INNER JOIN practice P
ON P.PracticeUid = Temp.practiceuid
WHERE NAME = 'Visual_Field_Exam'
AND Temp.mastervisittypeuid IS NOT NULL
AND P.ExternalID IN ('26900', '26902', '26903', '26906',
'26907', '26908', '26946', '26963',
'27128', '27131', '27133', '27134',
'27135', '27137', '27166', '27167',
'27497', '27498', '27499', '27501',
'27502', '27504', '27505', '27509',
'27510', '27511', '27518')
GROUP BY P.ExternalID
我发现许多诊所都有患者,但没有患者找到一种做法。所以,我想为这种做法返回count(patientuid)= 0。
以下是样本数据。
PracticeId Patcount
26900 2583
26902 826
26903 4085
26906 241
26907 3205
26908 4592
26946 344
26963 398
27128 238
27131 2467
27133 975
27135 815
27137 1252
27166 1038
27167 211
27497 1053
27498 934
27499 3467
27501 617
27502 3511
27504 7222
27505 683
27509 210
27510 1145
27511 181
27518 500
在上面的输出中,我得到了26个练习的数据,但是&#34; 27134&#34;练习没有患者数,所以我希望它显示为0.
我想要上面的输出。我怎样才能实现它?
提前致谢..!
答案 0 :(得分:1)
假设你有一个表Practicer
来保存练习者(我不知道这是不是正确的单词,但对于SQL并不重要)。然后,您需要将该表与Patient
连接起来,以便获得所有练习者的列表过滤器where where子句。所以这将得到你想要的。
Select PR.PracticeName,
count(distinct patientid)
from Practicer PR
LEFT JOIN Patient P
ON PR.Practiceid = P.Practiceid
where PR.Practiceid in
('12345','65478','78541')
GROUP BY PR.PracticeName
通常,您希望返回2个字段。第一个是Hospitals
,Practiotioners
或您可能喜欢的任何其他内容的列表。为了获得完整列表(即使它没有计数),您需要从该表开始。
让我们说我们有一个表Hospitals
,我们想要过滤特定的ID。我们将得到以下查询:
SELECT HospitalId,
HospitalName
FROM Hospitals
WHERE HospitalId IN ('26900', '26902', '26903')
现在我们想知道每家医院的患者人数。我们知道id为#26902&#39;没有病人(WOW)。如果我们转到Patients
表并尝试以下内容:
SELECT HospitalId,
COUNT(*) AS NoOfPatients
FROM Patients
WHERE HospitalId IN ('26900', '26902', '26903')
GROUP BY HospitalId
它只返回ID&#39; 26900&#39;和&#39; 26903&#39;作为id为&#39; 26902&#39;没有任何病人。
那么,我们如何找出第三家医院?
我们加入了两个表:
SELECT H.HospitalId,
COUNT(PatienId) AS NoOfPatients
FROM Hospitals H
LEFT JOIN Patients P
WHERE H.HospitalId IN ('26900', '26902', '26903')
GROUP BY H.HospitalId
现在这将使所有要求的医院返回相应数量的患者。
您的情况更复杂,因为我们需要从Hospitals
到Patients
表的更多连接。但我希望我的解释会让你走上正轨。
它的本质是从List Table开始到Count表。