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

Oracle数据库ZAP_TEST_AP表按优先级筛选目标行的SQL查询问题

Oracle SQL 实现方案

你可以通过窗口函数ROW_NUMBER()实现分组优先级排序取数,具体语句如下:

SELECT A1, B1, C1
FROM (
    SELECT 
        t.*,
        ROW_NUMBER() OVER (
            PARTITION BY t.C1 
            ORDER BY 
                CASE 
                    WHEN t.A1 IS NOT NULL AND t.B1 IS NOT NULL THEN 1
                    WHEN t.A1 IS NOT NULL AND t.B1 IS NULL THEN 2
                    WHEN t.A1 IS NULL AND t.B1 IS NOT NULL THEN 3
                END ASC,
                ROWID ASC -- 同优先级按原表行顺序取数,匹配你预期的原行号结果
        ) AS rn
    FROM ZAP_TEST_AP t
    WHERE t.A1 IS NOT NULL OR t.B1 IS NOT NULL -- 直接过滤全空行,对应全空组不返回的要求
)
WHERE rn = 1;

逻辑说明

  • PARTITION BY C1实现按host字段分组
  • CASE语句完全匹配你要求的优先级规则,数值越小优先级越高
  • 内层WHERE条件提前筛除A1、B1全为空的行,避免无效数据参与排序
  • 外层取rn=1的行,就是每组按规则选出的唯一一行,和你预期的原行号1、4、7、9的结果完全匹配

内容的提问来源于stack exchange,提问作者Angelo Pisaturo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:45:03