sql - 在 SQL 查询条件下添加重复行

标签 sql oracle duplicates

假设有两个数据行:

with
 data_table (title, val_a, val_b) as ( 
    select 'A', 1, 1 from dual union all 
    select 'B', 1, 2 from dual
 ) 
 select *
   from data_table;

我想创建一个 SQL 查询,它在 VAL_A <> VAL_B 时复制一行,返回三行,如:

| TITLE | VAL_A | VAL_B |  MARKER    |
--------------------------------------
|  'A'  |  1    |  1    | 'SINGLE'   |
|  'B'  |  1    |  2    | 'MULTIPLE' |
|  'B'  |  1    |  2    | 'MULTIPLE' |

并且从大表中选择两次是不合适的data_table (联合所有,...)。

最佳答案

您可以使用不等式的自连接:

with
 data_table (title, val_a, val_b) as ( 
    select 'A', 1, 1 from dual union all 
    select 'B', 1, 2 from dual
 ) 
 select d1.*, nvl2(d2.title,'MULTIPLE','SINGLE') as marker
   from data_table d1
   left join data_table d2 on d1.val_a <> d1.val_b
  where d2.val_a is null
     or ( d2.val_a is not null and d2.val_a = d2.val_b );

Demo

关于sql - 在 SQL 查询条件下添加重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57572293/

相关文章:

mysql - 如何在mysql查询中获取上个月(不是最近30天)的记录

sql - 执行此查询的最佳方式是什么?也许是联盟

sql - 如何在oracle中找到一年前这一天的数据?

Oracle 触发器效率与计划作业

java - 在 Spring boot 中使用两个执行器运行并行作业

javascript - 计算字符串中重复字符的函数

mysql - SQL - 使用 2 个不同 ID 从列返回数据

python - 使用 cx_Oracle 将变量绑定(bind)到表名

mysql - 从 MySQL 数据库中选择多个重复字段

java - 用于计数出现次数的数据结构