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

如何基于多条件更新数据表中的APPROVAL列数据

解决方案:按规则填充APPROVAL列

假设你的数据表名为your_table_name,包含CUSTOMER、CUSTOMER_NEW、SALE_SHORT_ID、SALE_ID、APPROVAL(待填充)五列,以下用SQL窗口函数实现需求中的规则:

核心逻辑实现

基础版(允许多个最大长度行标Y)

WITH customer_stats AS (
    SELECT 
        *,
        -- 统计同一客户分组内的SALE_SHORT_ID不同值数量
        COUNT(DISTINCT SALE_SHORT_ID) OVER (PARTITION BY CUSTOMER) AS distinct_short_id_count,
        -- 统计同一客户+SALE_SHORT_ID分组内SALE_ID的最大长度
        MAX(LENGTH(SALE_ID)) OVER (PARTITION BY CUSTOMER, SALE_SHORT_ID) AS max_sale_id_len,
        -- 当前行SALE_ID的长度
        LENGTH(SALE_ID) AS current_sale_id_len
    FROM your_table_name
)
SELECT 
    CUSTOMER,
    CUSTOMER_NEW,
    SALE_SHORT_ID,
    SALE_ID,
    CASE
        -- 规则1:CUSTOMER_NEW与CUSTOMER不相等
        WHEN CUSTOMER_NEW <> CUSTOMER THEN 'Y'
        -- 规则2:CUSTOMER_NEW等于CUSTOMER,且该客户分组内存在不同的SALE_SHORT_ID
        WHEN distinct_short_id_count > 1 THEN 'Y'
        -- 规则3:CUSTOMER_NEW等于CUSTOMER,且当前行是该客户+SALE_SHORT_ID分组内SALE_ID最长的行
        WHEN current_sale_id_len = max_sale_id_len THEN 'Y'
        -- 其他情况标记为N
        ELSE 'N'
    END AS APPROVAL
FROM customer_stats;

进阶版(仅保留一个最大长度行标Y)

如果规则3要求同一分组内仅一行标Y(即使多个行的SALE_ID长度同为最大值),可以添加行号排序:

WITH customer_stats AS (
    SELECT 
        *,
        COUNT(DISTINCT SALE_SHORT_ID) OVER (PARTITION BY CUSTOMER) AS distinct_short_id_count,
        -- 给分组内的行按SALE_ID长度降序、SALE_ID本身降序排序
        ROW_NUMBER() OVER (PARTITION BY CUSTOMER, SALE_SHORT_ID ORDER BY LENGTH(SALE_ID) DESC, SALE_ID DESC) AS rn
    FROM your_table_name
)
SELECT 
    CUSTOMER,
    CUSTOMER_NEW,
    SALE_SHORT_ID,
    SALE_ID,
    CASE
        WHEN CUSTOMER_NEW <> CUSTOMER THEN 'Y'
        WHEN distinct_short_id_count > 1 THEN 'Y'
        -- 仅取分组内排序第一的行标Y
        WHEN rn = 1 THEN 'Y'
        ELSE 'N'
    END AS APPROVAL
FROM customer_stats;

适配说明

  • 若使用SQL Server,将LENGTH()替换为LEN()即可。
  • 代码中的your_table_name需要替换为你的实际表名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:30:49