【问题标题】:Custom Unique Row selection in oracle SQLoracle SQL中的自定义唯一行选择
【发布时间】:2022-12-09 21:49:51
【问题描述】:

让表 - 表A如下,

Row_No COL1 COL2 COL3 COL4
1 1234 SER1 Y ABC
2 1234 SER2 N DEF
3 3456 SER1 Y XYZ
4 3456 SER2 Y PQR
5 5678 SER1 N QAZ
6 5678 SER2 N SRT

是否可以使用 oracle sql 获得如下所示的结果?

Row_No COL1 COL2 COL3 COL4
1 1234 SER1 Y ABC
3 3456 SER1 Y XYZ
5 5678 SER1 N QAZ

独特的行选择规则是:

  • 在 COL1 中具有相同值的行中,
    • 为 COL3 选择带有 Y 的行。 (例如,在行中:1,2;第一个对于 COL3 有 Y)
    • 如果两行的 COL3 值相同 (Y/N),则选择其中一行(在 3, 4 -> 3 & 5,6 -> 5 中)。

【问题讨论】:

    标签: sql oracle oracle12c


    【解决方案1】:

    如果你种类使用 row_number 分析函数并将命名条件放入其 order by 子句中的行,你会得到这个:

    样本数据:

    SQL> with tablea (row_no, col1, col2, col3, col4) as
      2    (select 1, 1234, 'SER1', 'Y', 'ABC' from dual union all
      3     select 2, 1234, 'SER2', 'N', 'DEF' from dual union all
      4     select 3, 3456, 'SER1', 'Y', 'XYZ' from dual union all
      5     select 4, 3456, 'SER2', 'Y', 'PQR' from dual union all
      6     select 5, 5678, 'SER1', 'N', 'QAZ' from dual union all
      7     select 6, 5678, 'SER2', 'N', 'SRT' from dual
      8    ),
    

    查询从这里开始:

      9  temp as
     10    (select a.*,
     11       row_number() over (partition by col1
     12                          order by case when col3 = 'Y' then 1 else 2 end, row_no) rn
     13     from tablea a
     14    )
     15  select row_no, col1, col2, col3, col4
     16  from temp
     17  where rn = 1;
    
        ROW_NO       COL1 COL2 COL3 COL4
    ---------- ---------- ---- ---- ----
             1       1234 SER1 Y    ABC
             3       3456 SER1 Y    XYZ
             5       5678 SER1 N    QAZ
    
    SQL>
    

    【讨论】:

      猜你喜欢
      • 2020-11-27
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 2021-02-14
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多