在使用GROUP BY的情况下进行Oracle查询层次化分类

问题描述 投票:0回答:1

我无法在包含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

由于出现了WHEN ... CASE,因此出现错误“不是GROUP BY表达式”>

谢谢您的帮助

问候

我无法解决包含CASE的查询中的GROUP BY问题...何时可以帮助我解决此问题?选择ID,CODE,NOM AS TITLE,级别,...

sql oracle group-by case-when
1个回答
0
投票

因为group by时,您需要对select语句中使用的足够数量的列进行分组,并使用外部聚合函数(minmaxsum等)。因此,在您的情况下,这意味着-您可以按case语句中使用的所有列进行分组,也可以按整个case语句进行分组(只需将其复制到group by中)或任何子组合集case的全部,完全覆盖了它。但是-因为您没有使用任何聚合函数,所以我只需要执行distinct并完全删除group by

© www.soinside.com 2019 - 2024. All rights reserved.