Объединить две таблицы, новая сумма столбца старых столбцов - PullRequest
0 голосов
/ 03 ноября 2018

С учетом двух отдельных запросов SQL:

SELECT COUNT(N.NurseID) AS Nurses, D.DName, D.HName
FROM Department AS D, Nurse_Work AS N
WHERE N.DName = D.DName AND N.HName = D.HName
GROUP BY D.DName, D.HName;

SELECT COUNT(P.PhysicianID) AS Physicians, D.DName, D.HName
FROM Physician AS P, Department AS D
WHERE P.DName = D.DName AND P.HName = D.HName
GROUP BY D.DName, D.HName;

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

SELECT COUNT(N.NurseID) AS Nurses, D.DName, D.HName FROM Department AS D, 
Nurse_Work AS N WHERE N.DName = D.DName AND N.HName = D.HName GROUP BY 
D.DName, D.HName

NURSES      DNAME                                                        HNAME                                                       
----------- -------------------------------- ----------------------------------
      8     General Surgery                                              H1                                  
     10     General Surgery                                              H3
      7     General Surgery                                              H4
     10     General Surgery                                              H5
      7     General Surgery                                              H2                          
      3     Intensive Care Unit                                          H1                                   
      2     Intensive Care Unit                                          H3
      1     Intensive Care Unit                                          H4
      2     Intensive Care Unit                                          H5
      3     Intensive Care Unit                                          H2
      6     Ophthalmology                                                H1                 
      4     Ophthalmology                                                H3
      4     Ophthalmology                                                H4
      2     Ophthalmology                                                H5
      2     Ophthalmology                                                H2
      3     Otolaryngology                                               H1    
      1     Otolaryngology                                               H3
      2     Otolaryngology                                               H4
      2     Otolaryngology                                               H5
      2     Otolaryngology                                               H2
      4     Radiology                                                    H1
      6     Radiology                                                    H3
      4     Radiology                                                    H4
      5     Radiology                                                    H5
      6     Radiology                                                    H2

25 record(s) selected.


SELECT COUNT(P.PhysicianID) AS Physicians, D.DName, D.HName FROM Physician AS 
P, Department AS D WHERE P.DName = D.DName AND P.HName = D.HName GROUP BY 
D.DName, D.HName

PHYSICIANS  DNAME                                                        HNAME                                                       
----------- ------------------------------------------------------------ ------------------------------------------------------------
      2 General Surgery                                              H1                              
      2 General Surgery                                              H3
      2 General Surgery                                              H4
      2 General Surgery                                              H5
      2 General Surgery                                              H2
      1 Intensive Care Unit                                          H1                                
      1 Intensive Care Unit                                          H3
      1 Intensive Care Unit                                          H4
      1 Intensive Care Unit                                          H5
      1 Intensive Care Unit                                          H2
      1 Ophthalmology                                                H1                                 
      1 Ophthalmology                                                H3
      1 Ophthalmology                                                H4
      1 Ophthalmology                                                H5
      1 Ophthalmology                                                H2
      1 Otolaryngology                                               H1                           
      1 Otolaryngology                                               H3
      1 Otolaryngology                                               H4
      1 Otolaryngology                                               H5
      1 Otolaryngology                                               H2
      1 Radiology                                                    H1                           
      1 Radiology                                                    H3
      1 Radiology                                                    H4
      1 Radiology                                                    H5
      1 Radiology                                                    H2

25 record(s) selected.

Моя цель состоит в том, чтобы найти отделение и его больницу с наибольшим количеством сотрудников (медсестер и врачей), мне удалось отдельно подсчитать, сколько сотрудников по работе, теперь я хотел бы объединить результирующие таблицы в одну, где столбец на слева - сумма медсестер и врачей в соответствующей комбинации отделения / больницы. Я попытался использовать JOIN и UNION, однако они только дают мне результирующую таблицу с тремя столбцами, где в одном столбце отображаются как врачи, так и медсестры вместе со значениями, разделенными, а не суммированными. Как я могу создать таблицу со столбцом, который будет суммировать количество медсестер и врачей в соответствующей комбинации отделения / больницы?

Ответы [ 2 ]

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

Я использовал ваш базовый запрос и собрал его вместе с помощью UNION ALL, поскольку UNION может удалить дубликаты, если в больнице имеется одинаковое количество медсестер и врачей, тогда я беру сумму как врачей, так и медсестер.

Select DNAME,HName,SUM(CountAll) from
(SELECT COUNT(N.NurseID) AS CountAll, D.DName, D.HName
FROM Department AS D, Nurse_Work AS N
WHERE N.DName = D.DName AND N.HName = D.HName
GROUP BY D.DName, D.HName
UNION ALL
SELECT COUNT(P.PhysicianID) AS CountAll, D.DName, D.HName
FROM Physician AS P, Department AS D
WHERE P.DName = D.DName AND P.HName = D.HName
GROUP BY D.DName, D.HName)a
GROUP BY DNAME,HName
0 голосов
/ 03 ноября 2018

Я присоединяю запрос к деталям отделов с двумя сводными запросами (по одному на каждую таблицу), а затем добавляю два числа:

SELECT    d.dname, 
          d.hname,
          COALESCE(num_nurses, 0),
          COALESCE(num_physicians, 0),
          COALESCE(num_nurses, 0) + COALESCE(num_physicians, 0) AS total
FROM      department d
LEFT JOIN (SELECT   dname, hname, COUNT(*) AS num_nurses
           FROM     nurse_work
           GROUP BY dname, hname) n ON n.dname = d.dname AND n.hname = d.hname
LEFT JOIN (SELECT   dname, hname, COUNT(*) AS num_physicians
           FROM     physician
           GROUP BY dname, hname) p ON p.dname = d.dname AND p.hname = d.hname
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...