Como posso aplicar grupo por subconsulta como consulta principal?
Esta é a consulta:
select a.clinic_no ,
b.CLINIC_DESC_A ,
a.doctor_no ,
c.STAFF_NATIVE_NAME ,
count(DISCHARGE_FROM_CLINIC) ,
(select count(patient_no) from trng.opd_visits_history WHERE event_date BETWEEN 20240815 and 20240822) as "Total"
from trng.opd_visits_history a , trng.hospital_clinics b , trng.hospital_staff c
WHERE event_date BETWEEN 20240815 and 20240822
and a.CLINIC_NO = b.CLINIC_NO
and a.DOCTOR_NO = c.STAFF_NO
and b.DOCTOR_NO = c.STAFF_NO
and a.HOSPITAL_NO = 720022
and b.HOSPITAL_NO = 720022
and c.HOSPITAL_NO = 720022
AND a.DISCHARGE_FROM_CLINIC = 1
group by a.clinic_no , a.doctor_no , b.CLINIC_DESC_A , c.STAFF_NATIVE_NAME
A saída é assim:
clinic no doctor no discharge from clinic total
10 22 5 1230
12 15 4 1230
16 19 7 1230
20 13 2 1230
Preciso agrupar por subconsulta assim:
select count(patient_no) from trng.opd_visits_history WHERE event_date BETWEEN 20240815 and 20240822 group by clinic_no , doctor_no
quando eu uso group by inside com subquery ele mostra erro
ORA-01427 single row subquery returns more than one row
Você está tentando usar uma subconsulta correlacionada, mas não aplicou nenhuma correlação entre sua tabela e tabelas externas. Ele deve retornar apenas uma linha (valor), mas - quando você coloca
group by
uma cláusula nele - isso faz com que mais de uma linha seja retornada e você recebe um erro.Algo assim pode servir (também
JOIN
editei tabelas em colunas comuns e deixeiWHERE
a cláusula para filtrar as linhas resultantes):