查詢中使用 MAX(t281.uriage_denpyou_no) 等聚合函數,但 GROUP BY 子句僅包含 t281.seikyuusho_no,SELECT 清單中的其他非聚合欄位(如 CASE WHEN COUNT(...) ... END)未出現在 GROUP BY 中,違反 SQL 標準。
-- 原片段
SELECT t281.seikyuusho_no,
MAX(t281.uriage_denpyou_no) AS uriageDenpyouNo,
CASE WHEN COUNT(t281.uriage_denpyou_no) >= 2 THEN '1' ELSE '0' END AS uriageShuseiFg
FROM t_tokuisaki_seikyuu_uriage t281
WHERE t281.delete_fg = '0'
GROUP BY t281.seikyuusho_no; -- 只分組 seikyuusho_no
-- 修正:CASE 表達式依賴 COUNT,COUNT 是聚合,結果可直接用,但嚴格模式下需確認
-- Oracle 允許 SELECT 中出現聚合函數的運算,但建議將 CASE 包在聚合外層或改用窗口函數
SELECT seikyuusho_no,
MAX(uriage_denpyou_no) AS uriageDenpyouNo,
CASE WHEN COUNT(uriage_denpyou_no) >= 2 THEN '1' ELSE '0' END AS uriageShuseiFg
FROM t_tokuisaki_seikyuu_uriage
WHERE delete_fg = '0'
GROUP BY seikyuusho_no;
將大 SQL 拆解為多個 CTE (WITH 子句),逐步驗證每個子查詢的 GROUP BY 正確性,再組合。避免單層超長 SQL 導致維護困難。