首页 > 解决方案 > 识别分区后具有不同值的记录

问题描述

我正在尝试识别基于导入编号和部件编号分区的记录,但仅选择分类列在此分区中具有不同值的位置。

在下面的示例中,前 4 行具有不同的类,因此我只想选择这些记录。最后两行具有相同的类,因此应将它们过滤掉。

进口编号 零件编号 班级
1AU6006 ET7109 我们
1AU6006 ET7109 GEN
1AU6007 ET7110 我们
1AU6007 ET7110 GEN
1AU6512 ET7115 我们
1AU6512 ET7115 我们

我不确定如何弄清楚这个逻辑,所以我没有任何起始代码。

标签: sqloracle

解决方案


您可以对分区列使用分析计数:

select import_no, part_no, class,
  count(distinct class) over (partition by import_no, part_no) as class_count
from your_table;

IMPORT_NO PART_NO CLASS CLASS_COUNT
--------- ------- ----- -----------
1AU6006   ET7109  GEN             2
1AU6006   ET7109  US              2
1AU6007   ET7110  GEN             2
1AU6007   ET7110  US              2
1AU6512   ET7115  US              1
1AU6512   ET7115  US              1

然后在子查询或 CTE 中使用它来过滤掉该计数仅为 1 的行:

select import_no, part_no, class
from (
  select import_no, part_no, class,
    count(distinct class) over (partition by import_no, part_no) as class_count
  from your_table
)
where class_count > 1;

IMPORT_NO PART_NO CLASS
--------- ------- -----
1AU6006   ET7109  GEN  
1AU6006   ET7109  US   
1AU6007   ET7110  GEN  
1AU6007   ET7110  US   

db<>小提琴


推荐阅读