2016-04-07 11 views
0

enter image description hereSQL、ここでインナーは、Oracleで問題に参加

^^ HOSPITAL_SPECIALISE_TEST

enter image description here ^^HOSPITAL

は私の2つのテーブルです。今ここにある

enter image description here

...

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

そして、私は以下の結果が得られます。私は結果を生成するために、内部結合を使用しようとしている、これは私が現在使用してクエリです質問は、私はテーブルやディスプレイ病院名の両方に参加したいが、それは生成すると、私はなぜか失敗した...ここで は私のクエリです:

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 Oによってこの代わり

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

基(集計を除く)すべての列の選択を含んでいなければならない:

基HS.HOSPITAL_ID、HP.NAME BY。

1

病院の名前は、あなたがグループ化している病院IDから明確に結論づけることができますが、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; 

を参照するか、またはcableloadによって示唆されているように、事前に集計されたレコードに参加してください。