You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle中基于列值为同一键对提取单行数据的实现

Oracle 数据筛选:按优先级提取地址

原始数据

Account.Client.Address
Abc.Aaa.Mailing
AbcAaa.Domicile
Ccc.Aaa.Mailing
Ccc.Aaa.Domicile
Ccc.Aaa.Office
Ddd.Bbb.Domicile
Ddd.Bbb.Office

需求说明

针对同一 Client. + Account. 组合:

  • 若存在 Mailing 地址,仅保留该类型地址的记录
  • 若无 Mailing 地址,仅保留 Domicile 地址记录

预期结果

Account.Client.Address
Abc.Aaa.Mailing
Ccc.Aaa.Mailing
Ddd.Bbb.Domicile

解决方案 SQL

WITH ranked_addresses AS (
    SELECT 
        Account.,
        Client.,
        Address,
        ROW_NUMBER() OVER (
            PARTITION BY Client., Account.
            ORDER BY 
                CASE Address 
                    WHEN 'Mailing' THEN 1
                    WHEN 'Domicile' THEN 2
                    ELSE 3
                END
        ) AS address_rank
    FROM your_table_name
)
SELECT Account., Client., Address
FROM ranked_addresses
WHERE address_rank = 1;

代码说明

  1. CTE 分组排序:通过 ROW_NUMBER() 窗口函数,按 Client. 和 Account. 分组,给组内地址按优先级标记排名:Mailing 排1(最高优先级),Domicile 排2,其他地址排3。
  2. 筛选目标记录:主查询只保留每个分组中排名为1的记录,也就是符合需求的优先级最高的地址。

补充:如果同一组合下有多条相同优先级的地址(比如多条 Mailing)需要全部保留,可将 ROW_NUMBER() 替换为 RANK();若需去重,可在主查询中添加 DISTINCT。

内容的提问来源于stack exchange,提问作者cautis anca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:45:44