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

SQL Server中如何仅保留每组首行原值,其余行置0或空?

在SQL Server中实现分组仅第一条记录保留Fee原值,其余设为0

你可以用SQL Server的窗口函数ROW_NUMBER()来实现这个需求,这是最简洁高效的方法:

SELECT
    category,
    -- 仅每组第一条保留原Fee,其余设为0
    CASE
        WHEN ROW_NUMBER() OVER (PARTITION BY category ORDER BY [排序字段]) = 1
        THEN fee
        ELSE 0
    END AS fee,
    -- 保留其他需要的列
    col1,
    col2,
    col3
FROM 你的表名;

关键部分解释:

  • PARTITION BY category:把数据按category分组,每组单独生成行号
  • ORDER BY [排序字段]:这里必须指定一个字段来确定每组内的“第一条”记录,比如ID、创建时间这类有明确顺序的字段。如果不需要特定顺序,也可以用ORDER BY (SELECT NULL),但建议用实际排序键保证结果稳定
  • CASE语句:根据行号判断,行号为1的记录保留原始fee值,其余记录的fee设为0

如果需要直接更新原表数据(而非仅查询输出),可以用CTE结合UPDATE语句:

WITH ranked_data AS (
    SELECT
        fee,
        ROW_NUMBER() OVER (PARTITION BY category ORDER BY [排序字段]) AS rn
    FROM 你的表名
)
UPDATE ranked_data
SET fee = 0
WHERE rn > 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:25:51