sql 从公共列获取最大长度(或非数字)

问题描述 投票:0回答:1

我有三栏

BAN     OPCO    PROVIDER
ab123   2800    2800
ab124   2800    not in use
ab125   2800    2800
ab126   2900    TEST

我正在尝试得到以下结果

BAN     OPCO    PROVIDER
ab123   2800    not in use
ab124   2800    not in use
ab125   2800    not in use
ab126   2900    TEST

我的查询只返回 ab124 和 ab126, 但不是 ab123 和 ab125

https://dbfiddle.uk/Cjy2wc9D

oracle partition
1个回答
0
投票

使用

MAX(provider) KEEP (DENSE_RANK LAST ORDER BY LENGTH(provider))
作为分析函数:

SELECT ban,
       opco,
       MAX(provider)
         KEEP (DENSE_RANK LAST ORDER BY LENGTH(provider))
         OVER (PARTITION BY opco) AS provider
FROM   billing;

对于样本数据:

CREATE TABLE billing (ban, opco,provider) AS
SELECT 'ab123', '2800', '2800'       FROM DUAL UNION ALL
SELECT 'ab124', '2800', 'not in use' FROM DUAL UNION ALL
SELECT 'ab125', '2800', '2800'       FROM DUAL UNION ALL
SELECT 'ab126', '2900', 'TEST'       FROM DUAL

输出:

禁令 OPCO 提供商
ab123 2800 未使用
ab124 2800 未使用
ab125 2800 未使用
ab126 2900 测试

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.