首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用case语句和min()与group?

如何使用case语句和min()与group?
EN

Stack Overflow用户
提问于 2020-05-06 13:05:24
回答 2查看 123关注 0票数 1

执行以下查询时

代码语言:javascript
复制
SELECT CASE
         WHEN spd.IS_MAIN_DEFECT='Y' 
           THEN spd.piece_Defect_num_id 
         ELSE min(spd.PIECE_DEFECT_NUM_ID)
       END AS defect
  FROM piece P,
       STY_PIECE_DEFECT spd,
       STY_DEFECT_CATALOGUE sdc,
       piece_history ph,
       piece_history_out pho,
       PLANT_CONFIG pc
  (...inner join and where clause)
  GROUP BY p.PIECE_ID,
           CASE
             WHEN spd.IS_MAIN_DEFECT='Y'
               THEN spd.piece_Defect_num_id
             ELSE min(spd.PIECE_DEFECT_NUM_ID)
           end 

似乎是错误

ORA-00934:这里不允许组函数

我想,组中有错误min()。

我该如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-06 14:02:28

您必须像下面的analytical MIN()那样使用without group by函数

代码语言:javascript
复制
     SELECT distinct CASE WHEN spd.IS_MAIN_DEFECT='Y' 
      THEN spd.piece_Defect_num_id 
       ELSE min(spd.PIECE_DEFECT_NUM_ID) over () END AS defect
      FROM piece P , STY_PIECE_DEFECT spd ,STY_DEFECT_CATALOGUE sdc ,piece_history ph 
      , piece_history_out pho, PLANT_CONFIG pc
      (...inner join and where clause)
票数 1
EN

Stack Overflow用户

发布于 2020-05-06 14:33:05

我理解您希望将PIECE_DEFECT_NUM_ID保留在与IS_MAIN_DEFECT = 'Y'一起的行中,并获得非主缺陷线的MIN值。

对于这种情况,最简单的解决方案是,在PIECE_ID上使用IS_MAIN_DEFECT = 'Y' - you组并计算min(PIECE_DEFECT_NUM_ID),每个PIECE_ID, IS_MAIN_DEFECT只有一行。

行组的MIN等于原始值。

代码语言:javascript
复制
select PIECE_ID,IS_MAIN_DEFECT,
min(PIECE_DEFECT_NUM_ID) PIECE_DEFECT_NUM_ID
from tab
group by PIECE_ID, IS_MAIN_DEFECT
order by 1,2 desc;

如果您可能有更多的行(相同的PIECE_ID)与主标志,简单地选择它们取消分组,并添加分组的非主要部分使用UNION ALL

代码语言:javascript
复制
select PIECE_ID,IS_MAIN_DEFECT,PIECE_DEFECT_NUM_ID
from tab
where IS_MAIN_DEFECT = 'Y'
UNION ALL
select PIECE_ID,IS_MAIN_DEFECT,
min(PIECE_DEFECT_NUM_ID) PIECE_DEFECT_NUM_ID
from tab
where nvl(IS_MAIN_DEFECT,'N') != 'Y'
group by PIECE_ID, IS_MAIN_DEFECT
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61635958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档