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

SQL Server中按优先级从Key1分组行筛选指定行的优化方案咨询

优化SQL Server按优先级筛选分组数据的方案

针对你的需求,无需多次插入临时表,可通过**窗口函数ROW_NUMBER()**结合优先级排序实现一次查询完成筛选,代码简洁高效。

实现代码

SELECT Key1, Value
FROM (
    SELECT 
        Key1,
        Value,
        -- 按规则计算优先级并排序,优先级高的行排前面
        ROW_NUMBER() OVER (
            PARTITION BY Key1 
            ORDER BY 
                CASE 
                    -- 规则1:三个条件都非空,优先级最高
                    WHEN Cond1 <> '' AND Cond2 <> '' AND Cond3 <> '' THEN 4
                    -- 规则2:Cond1空,Cond2、Cond3非空
                    WHEN Cond1 = '' AND Cond2 <> '' AND Cond3 <> '' THEN 3
                    -- 规则3:Cond1、Cond2空,Cond3非空
                    WHEN Cond1 = '' AND Cond2 = '' AND Cond3 <> '' THEN 2
                    -- 规则4:所有条件为空,优先级最低
                    ELSE 1
                END DESC
        ) AS rn
    FROM myTable
) t
WHERE rn = 1;

逻辑说明

  1. 分区排序:通过PARTITION BY Key1将数据按Key1分组,每组内根据CASE语句计算的优先级值降序排序。
  2. 优先级赋值:给符合不同规则的行分配从4到1的优先级数值,数值越大代表优先级越高。
  3. 筛选结果:外层查询只取每组中排序后的第一行(rn=1),即每个Key1对应的最高优先级数据。

该方案只需一次扫描表即可完成筛选,避免了多次插入临时表的冗余操作,性能更优,且逻辑清晰易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:12:20