SQL统计articlecode列重复值并按分组生成rown序号
SQL查询解决方案:按articlecode分组生成一致序号并支持重复行处理
1. 全量展示所有重复行(含完整历史记录)
使用DENSE_RANK()窗口函数实现同一articlecode对应相同rown值,和你预期的输出完全匹配:
SELECT processname, articlecode, articlename, stock, createdon, DENSE_RANK() OVER (ORDER BY articlecode ASC) AS rown FROM Table_1;
2. 截断重复行(每个articlecode仅保留1行)
如果需要去重仅保留每个articlecode的单条记录,可使用如下语句,示例中默认保留每个articlecode最早创建的记录,可按需调整排序规则:
WITH article_ranked AS ( SELECT processname, articlecode, articlename, stock, createdon, DENSE_RANK() OVER (ORDER BY articlecode ASC) AS rown, ROW_NUMBER() OVER (PARTITION BY articlecode ORDER BY createdon ASC) AS group_inner_sort FROM Table_1 ) SELECT processname, articlecode, articlename, stock, createdon, rown FROM article_ranked WHERE group_inner_sort = 1;
说明
DENSE_RANK()窗口函数会按照你指定的排序规则生成连续不跳号的序号,相同articlecode的所有行序号完全一致,符合rown列的生成要求。- 如果你需要调整rown的生成顺序(比如按每个articlecode的最早创建时间排序生成序号),仅需要修改
DENSE_RANK()中ORDER BY后的字段即可。
内容的提问来源于stack exchange,提问作者Ankur Singh Bhandari
相关产品推荐
相关产品推荐

