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

如何用ROW_NUMBER和PARTITION为分组内唯一CNS_BID生成BUILD_NUM

解决SQL中按CNS_PID分组为唯一CNS_BID分配连续编号的问题

修正后的SQL代码

SELECT 
    CNS_PID, 
    CNS_BID, 
    DENSE_RANK() OVER(PARTITION BY CNS_PID ORDER BY CNS_BID) AS BUILD_NUM, 
    CNS_SECT_NUM
FROM REAL_PROP.CONSTRCOM

问题分析

原代码使用ROW_NUMBER() OVER(PARTITION BY CNS_PID ORDER BY CNS_PID),仅按CNS_PID分区且排序字段无实际区分度,会为每一行分配唯一递增编号,导致同一CNS_BID下的多行BUILD_NUM不统一,无法满足“同一建筑(CNS_BID)共享同一编号”的需求。

方案说明

使用DENSE_RANK()函数可精准实现需求:

  • PARTITION BY CNS_PID:确保编号在每个CNS_PID组内独立重置
  • ORDER BY CNS_BID:为每个唯一的CNS_BID分配连续排名,同一CNS_BID下的所有行共享相同的BUILD_NUM,编号连续无断层

结果对比

当前非预期结果

CNS_PIDCNS_BIDBUILD_NUMCNS_SECT_NUM
2656265611
2656265622
2656265633
265617016641
265617016652
265617016761
265617016772
265617016881
265617016892

预期结果(修正后可实现)

CNS_PIDCNS_BIDBUILD_NUMCNS_SECT_NUM
2656265611
2656265612
2656265613
265617016621
265617016622
265617016731
265617016732
265617016841
265617016842

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:49:53