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

如何在Pivot操作中消除重复值并将重复项置为0.0

解决Pivot时重复值二次及以后设为0.0的问题

首先,我们需要明确核心需求:当同一个RainDays值多次出现时,仅保留第一次出现的原值,后续重复出现的都替换为0.0,再进行Pivot操作将年份转为列。

原数据回顾

Pivoting前的数据:

YearRainDays
2012112
2013116
2014111
201580
2016110
2017102
201880
2019110

预期结果

20122013201420152016201720182019
112116111801101020.00.0

解决方案SQL

我们需要先对重复的RainDays进行标记和替换,再执行Pivot:

SELECT [2012], [2013], [2014], [2015], [2016], [2017], [2018], [2019]
FROM (
    SELECT 
        Year,
        -- 标记每个RainDays的出现次数,第一次保留原值,后续设为0.0
        CASE WHEN ROW_NUMBER() OVER(PARTITION BY RainDays ORDER BY Year ASC) = 1 
             THEN RainDays 
             ELSE 0.0 
        END AS ProcessedRainDays
    FROM Rain
) AS SourceTable
PIVOT (
    -- 因为每个年份唯一,用Max或Min都可以
    MAX(ProcessedRainDays) 
    FOR Year IN ([2012], [2013], [2014], [2015], [2016], [2017], [2018], [2019])
) AS PivotTable

代码解释

  1. 标记重复值:在子查询中,使用ROW_NUMBER() OVER(PARTITION BY RainDays ORDER BY Year ASC)对每个RainDays值按年份排序,生成组内序号。当序号为1时,保留原始RainDays;否则替换为0.0。
  2. Pivot转换:将处理后的结果按Year进行Pivot,把年份转为列,提取每个年份对应的ProcessedRainDays值(因为每个年份唯一,MAX/Min函数都能正确取到对应值)。

这样就能完美实现你需要的重复值处理逻辑啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:04:20