首页 > 解决方案 > 使用 GROUP BY 时的 Oracle Query 层次级别

问题描述

我无法解决包含 CASE...WHEN 的查询中的 GROUP BY 问题

你能帮我吗?

select  ID,
        CODE, 
        NOM AS TITLE,
        level,
        ID_PARENT,
        CASE ID_PARENT
            WHEN 1111 THEN 'MAIN'
            ELSE 
            (
                SUBSTR(
                (
                SELECT CODE FROM units o
                INNER JOIN LIB_UNITS_MV oLab on oLab.ID = o.ID WHERE o.ID = units.ID_PARENT AND LNG_CD = 'ENG'
                )        
                , 7)      
            )
        END AS "PARENT_CODE"         
from units
INNER JOIN LIB_UNITS_MV orgLab on orgLab.ID = units.ID
WHERE orgLab.LNG ='ENG' 
start with units.id = 1111
connect by prior u.ID = u.ID_PARENT
GROUP BY ID, CODE, NOM, level, ID_PARENT

我收到错误“不是 GROUP BY 表达式”,因为我有 WHEN...CASE

预先感谢您的帮助

问候

标签: sqloraclegroup-bycase-when

解决方案


因为当您group by需要按在select语句中使用的足够数量的列进行分组时,在聚合函数(min,maxsum)之外。因此,在您的情况下,这意味着-您可以按case语句中使用的所有列分组,也可以按整个case语句分组(只需将其复制到您的group by),或整体的任何子组合case,完全覆盖它。但是 - 因为你没有使用任何聚合函数,所以我会完全distinct放弃group by


推荐阅读