Объединение двух таблиц, включая строки, не найденные в другой таблице, с заменой значений в столбце - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть две таблицы из следующих двух запросов:

SELECT t3.PatientID, SUM(t3.Fee) as total FROM     
(SELECT t1.TestID, t2.PatientID, t1.Fee FROM    
(SELECT Test.TestID, Test.Fee FROM MedicalTest AS Test) AS t1,    
(SELECT T.TestID, T.PatientID FROM Take AS T) AS t2    
WHERE t1.TestID = t2.TestID    
ORDER BY t2.PatientID) AS t3        
GROUP BY t3.PatientID    
ORDER BY total DESC; 

Что дает мне таблицу идентификаторов пациентов и сколько они потратили на тесты, часть таблицы выглядит так:

PATIENTID   TOTAL                            
----------- ---------------------------------
99642131                            550.00
99631255                            440.00
99665378                            430.00
99627956                            310.00
99657423                            280.00
99641125                            260.00
99630025                            230.00
99648682                            230.00

Мой другой запрос:

SELECT DISTINCT D.PatientID FROM Diagnose AS D     
WHERE D.PhysicianID IN (    
SELECT P.PhysicianID FROM Physician AS P    
WHERE P.HName = 'Specific Hospital'    
AND P.DName = 'Intensive Care Unit');     

Возвращает мне список идентификаторов пациентов, которые находятся под опекой конкретного врача. Часть таблицы:

PATIENTID  
-----------
99615376
99618797
99620783
99620882
99621221

Я пытаюсь создать результирующую таблицу, которая содержит идентификаторы пациентов из второй таблицы, а также сколько они потратили на медицинские анализы из первой таблицы. Некоторые пациенты из второй таблицы не проходили никаких тестов, в этом случае я хотел бы, чтобы таблица просто дала 0 для общего столбца, однако моя попытка объединения таблиц дает мне только пациентов, которые проходили тесты:

SELECT t5.PatientID, t4.total FROM

(SELECT t3.PatientID, SUM(t3.Fee) as total FROM
(SELECT t1.TestID, t2.PatientID, t1.Fee FROM
(SELECT Test.TestID, Test.Fee FROM MedicalTest AS Test) AS t1,
(SELECT T.TestID, T.PatientID FROM Take AS T) AS t2
WHERE t1.TestID = t2.TestID
ORDER BY t2.PatientID) AS t3
GROUP BY t3.PatientID
ORDER BY total DESC) AS t4,

(SELECT DISTINCT D.PatientID FROM Diagnose AS D
WHERE D.PhysicianID IN (
SELECT P.PhysicianID FROM Physician AS P
WHERE P.HName = 'Specific Hospital'
AND P.DName = 'Intensive Care Unit')) AS t5

WHERE t5.PatientID = t4.PatientID;

Таблица результатов:

PATIENTID   TOTAL                            
----------- ---------------------------------
99642131                            550.00
99665378                            430.00
99627956                            310.00

Как можно включить пациентов из таблицы 2, которые не проходили тесты, и ввести 0 в их общий столбец?

1 Ответ

0 голосов
/ 05 ноября 2018

Мне удалось написать следующий запрос:

SELECT DISTINCT D.PatientID, COALESCE(total, '0') AS finalTotal
FROM Diagnose AS D
LEFT JOIN (
SELECT T.PatientID, SUM(M.Fee) AS total
FROM Take AS T, MedicalTest AS M
WHERE T.TestID = M.TestID
GROUP BY T.PatientID
          ) AS t1
ON t1.PatientID = D.PatientID
WHERE D.PhysicianID IN (
SELECT P.PhysicianID FROM Physician AS P
WHERE P.HName = 'Specific Hospital'
AND P.DName = 'Intensive Care Unit')
ORDER BY finalTotal DESC;

Я использую COALESCE(total, '0') с моим LEFT JOIN для ввода 0 в строках, где не проводились медицинские тесты. Это привело меня к желаемому результату:

PATIENTID   FINALTOTAL                                
----------- ------------------------------------------
99642131                                     550.00
99665378                                     430.00
99627956                                     310.00
99615376                                          0
99618797                                          0
99620783                                          0
99620882                                          0
99621221                                          0
99642157                                          0
99655482                                          0
99664061                                          0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...