SQL ОБНОВЛЕНИЕ ORA-01427: однострочный подзапрос возвращает более одной строки для расчета процента - PullRequest
0 голосов
/ 13 января 2020

Это таблица, в которой я хочу указать проценты.


+------+--------+-------------+--------------+
| H_ID | H_NAME | DOCTOR_STAT | PATIENT_STAT |
+------+--------+-------------+--------------+
|    1 | NAME 1 |           0 |             0|
|    2 | NAME 2 |           0 |             0|
|    3 | NAME 3 |           0 |             0|
|    4 | NAME 4 |           0 |             0|
|    5 | NAME 5 |           0 |             0|
+------+--------+-------------+--------------+


Это код, который я написал. Внутренний sql -запрос работает нормально (он правильно печатает процент от указанного идентификатора больницы), но возвращает несколько строк, поэтому обновление не работает.

UPDATE HOSPITAL_STATISTICS
SET DOCTOR_STAT=(SELECT ROUND(100*COUNT(DOCTOR.WORK_HOSPITAL)/(SELECT COUNT(DOCTOR.ID)FROM DOCTOR),2)
FROM DOCTOR,HOSPITAL
WHERE HOSPITAL.HOSPITAL_ID=DOCTOR.WORK_HOSPITAL
GROUP BY HOSPITAL.HOSPITAL_ID)

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

РЕДАКТИРОВАТЬ: у меня есть вторая таблица с именем Patient_Visit и третья больница

Patient_Visit
[Visit_ID,Patient_ID,Hospital_ID]

Hospital
[Hospital_ID,Hospital_Name]

, и я пытаюсь сделать то же самое с этим кодом

UPDATE HOSPITAL_STATISTICS
SET PATIENT_STAT=(SELECT ROUND(100* COUNT (*) / (SELECT COUNT(*) FROM PATIENT_VISIT),2)
FROM PATIENT_VISIT,HOSPITAL
WHERE PATIENT_VISIT.HOSPITAL_ID=HOSPITAL.HOSPITAL_ID AND HOSPITAL_STATISTICS.H_ID=PATIENT_VISIT.HOSPITAL_ID
GROUP BY HOSPITAL_VISIT.HOSPITAL_ID)

, который дает мне эту ошибку: ORA-01407: невозможно обновить ("HOSPITAL_STATISTICS". "PATIENT_STAT") до NULL. Есть идеи?

1 Ответ

0 голосов
/ 13 января 2020

Вы хотите коррелированный подзапрос, а не JOIN:

UPDATE HOSPITAL_STATISTICS HS
    SET DOCTOR_STAT = (SELECT ROUND(100 * COUNT(*) / (SELECT COUNT(*) FROM DOCTOR), 2)
                       FROM DOCTOR D
                       WHERE HS.H_ID = D.WORK_HOSPITAL
                      );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...