2016-04-07 2 views
0

enter image description hereSQL, Inner заспорить в оракула

^HOSPITAL_SPECIALISE_TEST^

enter image description here ^ БОЛЬНИЦА^

Вот мои 2 таблицы. Я пытаюсь использовать внутреннее соединение для получения результата, и это вопрос, я в настоящее время использую:

SELECT HOSPITAL_ID, COUNT(DISTINCT SPECIALISE) AS SPECIALISE FROM HOSPITAL_SPECIALISE_TEST GROUP BY HOSPITAL_ID; 

И я получаю результат ниже ...

enter image description here

Теперь здесь вопрос, я хочу присоединиться обе таблицы и имя дисплея больницы, но он не может генерировать и я не знаю, почему ... Вот мой запрос:

SELECT HS.HOSPITAL_ID, HP.NAME, COUNT(DISTINCT HS.SPECIALISE) AS SPECIALISE 
FROM HOSPITAL_SPECIALISE_TEST HS 
INNER JOIN HOSPITAL HP 
on HS.HOSPITAL_ID = HP.HOSPITAL_ID 
GROUP BY HOSPITAL_ID; 
+1

«но он не сгенерирован» - это слабое описание происходящего. Вместо этого вы должны сообщить нам ошибку Oracle («ORA-00979 не выражение GROUP BY»). –

ответ

1

D О это вместо

SELECT HP.NAME, spec.hospital_id, spec.specialise 
FROM ( SELECT HOSPITAL_ID, COUNT (DISTINCT SPECIALISE) AS SPECIALISE 
     FROM HOSPITAL_SPECIALISE_TEST 
    GROUP BY HOSPITAL_ID) spec 
    INNER JOIN HOSPITAL HP ON spec.HOSPITAL_ID = HP.HOSPITAL_ID 
0

В группе с помощью должен содержать все столбцы выберите (кроме агрегата):

GROUP BY HS.HOSPITAL_ID, HP.NAME.

1

Хотя название больницы можно однозначно заключить из идентификатора больницы, с которым вы группируетесь, Oracle требует, чтобы он либо включался в предложение GROUP by, либо был агрегирован. Это приводит к одному из этих довольно неуклюжих запросов:

select hs.hospital_id, hp.name, count(distinct hs.specialise) as specialise 
from hospital_specialise_test hs 
inner join hospital hp on hs.hospital_id = hp.hospital_id 
group by hs.hospital_id, hp.name; 

или

select hs.hospital_id, max(hp.name) as name, count(distinct hs.specialise) as specialise 
from hospital_specialise_test hs 
inner join hospital hp on hs.hospital_id = hp.hospital_id 
group by hs.hospital_id; 

Это соответствует старому стандарту SQL 92, но не более новых версий стандарта SQL, который бы с удовольствием примет ваш запрос :-)

Вы можете обойти проблему, не присоединяющиеся к таблицам:

select 
    hs.hospital_id, 
    (select name from hospital hp where hs.hospital_id = hp.hospital_id) as name, 
    count(distinct hs.specialise) as specialise 
from hospital_specialise_test hs 
group by hospital_id, hp.name; 

или путем присоединения предварительно агрегированных записей, как это предлагается с помощью кабельной нагрузки.