如何在SELECT语句中使相同名称的行拥有相同行号?
解决相同BENFNAME行号不一致的问题
你现在用的ROW_NUMBER()窗口函数,哪怕分区内排序字段完全相同,也会给每一行生成唯一的递增编号——这就是为啥相同BENFNAME的行号不一样的原因。要让同名的行拥有相同行号,把ROW_NUMBER()换成DENSE_RANK()或者RANK()就行:
修改后的SQL代码
方案1:全局统一行号(同名行号相同,不同名递增)
SELECT DENSE_RANK() OVER (ORDER BY BENFNAME DESC) AS ROWNUM , BENFNAME, BENLNAME , REMID, BENENATIONALITY , CUSBENRELATION FROM SEND WHERE REMID = 445231
方案2:每个名称单独排号(所有同名行号都是1)
如果你需要每个BENFNAME分组内的行号都从1开始,也可以保留分区逻辑:
SELECT DENSE_RANK() OVER (PARTITION BY BENFNAME ORDER BY BENFNAME DESC) AS ROWNUM , BENFNAME, BENLNAME , REMID, BENENATIONALITY , CUSBENRELATION FROM SEND WHERE REMID = 445231
三个窗口函数的核心区别
ROW_NUMBER():强制给每行分配唯一编号,哪怕排序字段完全相同,编号仍会递增DENSE_RANK():给排序字段相同的行分配相同编号,编号连续不跳过(比如1、1、2、3)RANK():给排序字段相同的行分配相同编号,但会跳过中间编号(比如1、1、3、4)
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

