SQL更新ORA-01427:单行子查询返回多行计算百分比

SQL更新ORA-01427:单行子查询返回多行计算百分比,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,这是我要放百分比的表格 +------+--------+-------------+--------------+ | H_ID | H_NAME | DOCTOR_STAT | PATIENT_STAT | +------+--------+-------------+--------------+ | 1 | NAME 1 | 0 | 0| | 2 | NAME 2 | 0 | 0| |

这是我要放百分比的表格


+------+--------+-------------+--------------+
| 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查询工作正常(它正确打印所述医院id的百分比),但它返回多行,因此更新不起作用

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_Visite的表和第三张名为Hospital的表

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:无法将(“医院统计”、“患者统计”)更新为空。有什么想法吗?

您想要的是相关的子查询,而不是
连接:

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
                      );

你是最棒的。谢谢你的帮助。你能简单地解释一下你在查询中的不同做法吗?@spirothedragon。这是使用相关子查询,因此内部查询不会返回所有行的结果。@gordonlinoff.您能检查我所做的编辑吗?当我必须连接两个表时,它不起作用。@spirothedragon。你应该问一个新问题。你最初在这里提出的问题已经得到了回答。