oracle 选择列中具有特定值的行(如果存在)

2nc8po8w  于 2023-08-04  发布在  Oracle
关注(0)|答案(1)|浏览(96)

我有一个sql表t1,列c1,c2,c3,c4,. cn。主键是具有列(c1,c2,c3,...)的组合键。其中一个主键列c1只能有2个值v1或v2。我需要写一个查询,使得所有其他键列相同,如果v2存在,则选择包含v2的行,否则选择包含v1的行。
我尝试了使用row_number()的partition_by子句,但对于大数据集,它将创建太多分区,因此不可行。

8nuwlpux

8nuwlpux1#

您可以使用ROW_NUMBER解析函数和PARTITION BY主键中除c1之外的所有列,然后按DESC结束顺序使用ORDER BY c1,然后过滤仅返回每个分区中编号最早的行:

SELECT *
FROM   (
  SELECT t.*,
         ROW_NUMBER() OVER (
           PARTITION BY c2, c3, c4, c5 -- All the primary key columns except c1
           ORDER BY c1 DESC
         ) AS rn
  FROM   table_name t
)
WHERE  rn = 1;

字符串

相关问题