実現したいこと
CASE句を含むSQLを実行し、条件分岐を行なうと同時にGROUP BYで括りたい
前提
元々あったSQLのコードを、CASE句を書き加え条件分岐で表示しようとしています。
ただ、実行を行ったところ、「GROUP BYの式ではありません」とエラーがでてしまいました。
GROUP BY の中に一行追加したところ正しく表示されたのですが、何故この一行を追加したことで正しく表示されるのかがいまいち分かっていません。
(GROUP BY には集計関数を除いてSELECTと完全に一致させる必要があるかと思っていたのですが、今回追加した一文はCASE句のELSEには指定していますが、SELECTに直接指定していません)
どなたか解説いただけませんか?
よろしくお願いします。
発生している問題・エラーメッセージ
ORA-00979: GROUP BYの式ではありません。
00979. 00000- “not a GROUP BY expression”
*Cause:
*Action
行1列1,538でエラー
該当のソースコード及び改良コード
Oracle SQL Developer上にて実行
SELECT
substr(log.REQUEST_INFO,instr(log.REQUEST_INFO,’cyohyoID:[’) + 10) as 帳票ID,
CASE
WHEN usr.BUSYO_CD IN (’014’, ’023’) THEN ’〇’
WHEN usr.BUSYO_CD IN (’064’) THEN ’△’
WHEN usr.BUSYO_CD IN (’065’) THEN ’□’
WHEN usr.BUSYO_CD IN (’066’) THEN ’×’
ELSE code_tiiki.CODE_NAME
END as 地域,
COUNT(*) as 回数
FROM
log_table log
LEFT JOIN user_table usr
on log.user_id = usr.user_id
LEFT JOIN
(SELECT CODE_KBN, CODE, CODE_NAME
FROM code_table
WHERE CODE_KBN = ’AH’) code_tiiki
on usr.TIIKI_CD = code_tiiki.CODE
WHERE
log.time BETWEEN ‘2022/12/26’ and ‘2023/01/25’
GROUP BY
substr(log.REQUEST_INFO,instr(log.REQUEST_INFO,’cyohyoID:[’) + 10),
CASE
WHEN usr.BUSYO_CD IN (’014’, ’023’) THEN ’〇’
WHEN usr.BUSYO_CD IN (’064’) THEN ’△’
WHEN usr.BUSYO_CD IN (’065’) THEN ’□’
WHEN usr.BUSYO_CD IN (’066’) THEN ’×’
ELSE code_tiiki.CODE_NAME
END;
---以下のようにGROUP BY句の中に一行追加したところエラーが解消されたのですが、
SELECTに直接指定していない一文をGROUP BY に加えてなぜエラーが解消したのかが分かりません、、---
GROUP BY
substr(log.REQUEST_INFO,instr(log.REQUEST_INFO,’cyohyoID:[’) + 10),
CASE
WHEN usr.BUSYO_CD IN (’014’, ’023’) THEN ’〇’
WHEN usr.BUSYO_CD IN (’064’) THEN ’△’
WHEN usr.BUSYO_CD IN (’065’) THEN ’□’
WHEN usr.BUSYO_CD IN (’066’) THEN ’×’
ELSE code_tiiki.CODE_NAME
END,
code_tiiki.CODE_NAME; ← 今回追加した一文
補足情報(FW/ツールのバージョンなど)
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - ProductionVersion 18.11.0.0.0
