下面这个SQL语句再执行的时候出现ORA-00937:not a single-group group fuction错误。
语句里面有两个子句A和B,A和B是经过分组的,那么语句也要求外层也要经过分组才能运行,因为我在最后面加上"GROUP BY B.SORT_CD_1"时,错误就会走到下一处“C.MASTER_RM”,但错误是一样的ORA-00937:not a single-group group fuction。我总不能把处层都GROUP BY 吧,请高手指点应该怎么样处理SELECT '3' AS MEISAI_KB,B.SORT_CD_1,
C.MASTER_RM SORT_NM_1,B.SORT_CD_2,D.BUKA_RM SORT_NM_2,B.SORT_CD_3,
E.TANTO_RM SORT_NM_3,B.SORT_CD_4,'' AS SORT_NM_4,B.SORT_CD_5,'' AS SORT_NM_5,B.MEISAI_CD,'' AS MEISAI_NM,
MAX(G.TOKUI_KR) AS TOKUI_KR,A.URIAGE_KN,A.HENPIN_KN,ROUND(A.HENPIN_KN*100/A.URIAGE_KN,2) TUKI_HENPIN_RT,
A.NEBIKI_KN,ROUND(A.NEBIKI_KN*100/A.URIAGE_KN,2) TUKI_NEBIKI_RT,A.URIAGE_KN+A.HENPIN_KN+A.NEBIKI_KN TUKI_JUNURI_KN,
A.ARARI_KN,ROUND(A.ARARI_KN*100/(A.URIAGE_KN+A.HENPIN_KN+A.NEBIKI_KN),2) TUKI_ARARI_RT,
ROUND((A.URIAGE_KN+A.HENPIN_KN+A.NEBIKI_KN)*100/A.MOKUHYO_URI_KN,2) TUKI_MOKUHYO_URI_RT,
ROUND(A.ARARI_KN*100/A.MOKUHYO_URI_KN,2) TUKI_MOKUHYO_ARARI_RT,
ROUND((A.URIAGE_KN+A.HENPIN_KN+A.NEBIKI_KN)*100/(A.ZEN_URIAGE_KN+A.ZEN_HENPIN_KN+A.ZEN_NEBIKI_KN),2) TUKI_ZEN_URI_RT,
ROUND(A.ARARI_KN*100/A.ZEN_ARARI_KN,2) TUKI_ZEN_ARARI_RT,B.URIAGE_KN,B.HENPIN_KN,
ROUND(B.HENPIN_KN*100/B.URIAGE_KN,2) KI_HENPIN_RT,B.NEBIKI_KN,ROUND(B.NEBIKI_KN*100/B.URIAGE_KN,2) KI_NEBIKI_RT,
B.URIAGE_KN+B.HENPIN_KN+B.NEBIKI_KN KI_JUNURI_KN,B.ARARI_KN,
ROUND(B.ARARI_KN*100/(B.URIAGE_KN+B.HENPIN_KN+B.NEBIKI_KN),2) KI_ARARI_RT,
ROUND((B.URIAGE_KN+B.HENPIN_KN+B.NEBIKI_KN)*100/B.MOKUHYO_URI_KN,2) KI_MOKUHYO_URI_RT,ROUND(B.ARARI_KN*100/B.MOKUHYO_ARARI_KN,2) KI_MOKUHYO_ARARI_RT,
ROUND((B.URIAGE_KN+B.HENPIN_KN+B.NEBIKI_KN)*100/(B.ZEN_URIAGE_KN+B.ZEN_HENPIN_KN+B.ZEN_NEBIKI_KN),2) KI_ZEN_URI_RT,
ROUND(B.ARARI_KN*100/B.ZEN_ARARI_KN,2) KI_ZEN_ARARI_RT,A.SORT_CD_1 || A.SORT_CD_2 AS PAGE_KEY 
FROM 
(SELECT SORT_CD_1,SORT_CD_2,SORT_CD_3,MAX(SORT_CD_4) SORT_CD_4,MAX(SORT_CD_5) SORT_CD_5,MAX(MEISAI_CD) MEISAI_CD,
SUM(URIAGE_KN) URIAGE_KN,SUM(HENPIN_KN) HENPIN_KN,SUM(NEBIKI_KN) NEBIKI_KN,SUM(ARARI_KN) ARARI_KN,SUM(MOKUHYO_URI_KN) MOKUHYO_URI_KN,SUM(MOKUHYO_ARARI_KN) MOKUHYO_ARARI_KN,
SUM(ZEN_URIAGE_KN) ZEN_URIAGE_KN,SUM(ZEN_HENPIN_KN) ZEN_HENPIN_KN,SUM(ZEN_NEBIKI_KN) ZEN_NEBIKI_KN,SUM(ZEN_ARARI_KN) ZEN_ARARI_KN 
FROM GWGHHG210B_1 WHERE DATA_KB='1' 
GROUP BY SORT_CD_1,SORT_CD_2,SORT_CD_3 
) A 
LEFT OUTER JOIN 
(SELECT SORT_CD_1,SORT_CD_2,SORT_CD_3,MAX(SORT_CD_4) SORT_CD_4,MAX(SORT_CD_5) SORT_CD_5,MAX(MEISAI_CD) MEISAI_CD,
SUM(URIAGE_KN) URIAGE_KN,SUM(HENPIN_KN) HENPIN_KN,SUM(NEBIKI_KN) NEBIKI_KN,SUM(ARARI_KN) ARARI_KN,SUM(MOKUHYO_URI_KN) MOKUHYO_URI_KN,SUM(MOKUHYO_ARARI_KN) MOKUHYO_ARARI_KN,
SUM(ZEN_URIAGE_KN) ZEN_URIAGE_KN,SUM(ZEN_HENPIN_KN) ZEN_HENPIN_KN,SUM(ZEN_NEBIKI_KN) ZEN_NEBIKI_KN,SUM(ZEN_ARARI_KN) ZEN_ARARI_KN
FROM GWGHHG210B_1 WHERE DATA_KB='2' 
GROUP BY SORT_CD_1,SORT_CD_2,SORT_CD_3 
) B 
ON B.SORT_CD_1=A.SORT_CD_1 AND B.SORT_CD_2=A.SORT_CD_2 
AND B.SORT_CD_3=A.SORT_CD_3  
LEFT OUTER JOIN HMMEISHO C ON A.SORT_CD_1 = C.MASTER_CD 
LEFT OUTER JOIN HMBUKA D ON A.SORT_CD_2 = D.BUKA_CD 
LEFT OUTER JOIN HMTANTO E ON A.SORT_CD_3 = E.TANTO_CD 
LEFT OUTER JOIN HMTOKUI G ON A.MEISAI_CD = G.TOKUI_CD

解决方案 »

  1.   

    不是很明白
    没有9i环境,不能测试
    试一下将 outer join 变成 col=col2(+)的形式试试
    看看试不试oracle的bug
      

  2.   

    这是我见到的最长的sql,开眼界啦!楼主!强!奇强!(啊呸,不小心说了句广告词...)
      

  3.   

    错误并非楼上所说的,是因为SELECT外层中包含有MAX(G.TOKUI_KR) AS TOKUI_KR,所以才要求分组