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

SQL Server 2016使用CASE仅修改重复Text列值的指定单行

解决方案

核心思路是利用SQL Server的窗口函数ROW_NUMBER()给结果集加行标识,结合行号和[Text]列的值做条件判断,即可精准只修改指定行的内容,不会影响另一条匹配记录。

1. 仅修改查询结果的显示值(不改动底层数据)

直接改造你现有的查询代码即可,示例如下:

WITH base_data AS (
    SELECT 
        DimCompany.SID as CompanyFK,
        DimBrand.SID as BrandFK,
        DimSalesman.SID as SalesmanFK,
        FLD01A as [Text],
        FLD024 as [Value],
        -- 此处ORDER BY后的内容请替换为能固定你数据集排序的字段,确保行号和你实际看到的顺序一致
        ROW_NUMBER() OVER(ORDER BY (SELECT 0)) AS row_num
    FROM OPENQUERY(SYSTEM21,'
        select 
        *
        from CWAUL.SA080VMF
    ')
    LEFT JOIN DimCompany ON DimCompany.CompanyCode = 'CW'
    LEFT JOIN DimBrand ON DimBrand.BrandName = 'Group'
    LEFT JOIN DimSalesman ON DimSalesman.SalesmanCode = 'R11'
)
SELECT 
    CompanyFK,
    BrandFK,
    SalesmanFK,
    CASE 
        WHEN row_num = 2 AND [Text] = 'PERCENT ACHIEVED' THEN 'PERCENT ACHIEVED MONTH'
        ELSE [Text]
    END AS [Text],
    [Value]
FROM base_data

注意:ROW_NUMBER()的ORDER BY子句必须指定能确定行顺序的字段,如果你的数据集有默认排序依据(比如主键、创建时间字段),请替换掉ORDER BY (SELECT 0),避免多次查询行号不稳定。

2. 需要修改底层源表的记录

如果两条PERCENT ACHIEVED记录有唯一标识字段(比如主键ID),可以直接基于主键定位更新:

UPDATE CWAUL.SA080VMF
SET FLD01A = 'PERCENT ACHIEVED MONTH'
WHERE 主键字段 = '第二行对应的主键值'

如果没有唯一标识,也可以结合CTE加行号的方式更新:

WITH update_data AS (
    SELECT 
        FLD01A,
        ROW_NUMBER() OVER(ORDER BY 确认好的排序字段) AS row_num
    FROM CWAUL.SA080VMF
)
UPDATE update_data
SET FLD01A = 'PERCENT ACHIEVED MONTH'
WHERE row_num = 2 AND FLD01A = 'PERCENT ACHIEVED'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:42:04