2017-01-17 10 views
1

して、Oracle SQLグループ:私は私が私のSQLクエリで使用したい3つのデータベーステーブルを、持っているアッパー

問題は、私がMYMAINSCHEMAで見つかった「学校名」の値にGROUP BYをしたいです。 SURVEYテーブル。ただし、「学校名」は大文字または小文字にすることがあります。上記の "BY式ではないGROUP" 私にエラーを与えて実行

select SR.SCHOOL_NUM,UPPER(S.SCHOOLNAME), COUNT(S.SWSID) AS NUMSTUDENTS 
from MYMAINSCHEMA.SURVEY S 
JOIN MYOTHERSCHEMA.SCHOOL_RTO SR ON S.SCHOOLCODE = SR.SCHOOL_NUM 
JOIN MYOTHERSCHEMA.RTO R ON R.RTO_NUM = SR.RTO_NUM 
GROUP BY SR.SCHOOL_NUM,UPPER(S.SCHOOLNAME) 
ORDER BY S.SCHOOLNAME ASC; 

は、ここに私のSQLです。 最後の1行目と2行目でUPPERを削除しても問題ありませんが、結果は重複したSCHOOL名を返します(大文字と小文字の両方)。

この問題を解決する方法はありますか?

ありがとうございました。

答えて

1

これを試してみてください:

select SR.SCHOOL_NUM, 
    UPPER(S.SCHOOLNAME) SCHOOLNAME, -- added alias here 
    COUNT(S.SWSID) AS NUMSTUDENTS 
from MYMAINSCHEMA.SURVEY S 
JOIN MYOTHERSCHEMA.SCHOOL_RTO SR ON S.SCHOOLCODE = SR.SCHOOL_NUM 
JOIN MYOTHERSCHEMA.RTO R ON R.RTO_NUM = SR.RTO_NUM 
GROUP BY SR.SCHOOL_NUM,UPPER(S.SCHOOLNAME) 
ORDER BY SCHOOLNAME ASC; -- fixed here by sorting on the alias 
          -- (can use "UPPER(S.SCHOOLNAME)") 

UPPER(S.SCHOOLNAME)を集約に使用されています。したがって、S.SCHOOLNAMEは発注できません。 UPPER(S.SCHOOLNAME)を使用してください。エイリアスまたは列番号です。

+0

ありがとうございました、それは確かに問題を引き起こしたBY ORDERました。私は "GROUP BY式ではない"というエラーメッセージによって捨てられました。これは、GROUP BYのORDERよりも何かが間違っていることを暗示していました。 – Ghaml

+0

上記のような状況では、ORDER BY句に列番号を指定することもできます。この場合、「ORDER BY 2 ASC」は完全に許容可能である。 –

1

問題はORDER BYです。ただ、あまりにもそこUPPER()を使用します。

ORDER BY UPPER(S.SCHOOLNAME) ASC; 

を私はschool_numが実際に一意であると仮定した場合、私はお勧めかもしれません:

select SR.SCHOOL_NUM, MAX(UPPER(S.SCHOOLNAME)), 
     COUNT(S.SWSID) AS NUMSTUDENTS 
from MYMAINSCHEMA.SURVEY S join 
    MYOTHERSCHEMA.SCHOOL_RTO SR 
    on S.SCHOOLCODE = SR.SCHOOL_NUM join 
    MYOTHERSCHEMA.RTO R 
    on R.RTO_NUM = SR.RTO_NUM 
group by SR.SCHOOL_NUM 
order by MAX(UPPER(S.SCHOOLNAME)) ASC; 
+0

ありがとうございます - 提案されたSQLが機能しました。 – Ghaml

関連する問題