如何为aValue与bValue的唯一组合分配rowNum2列
解决方案
你的需求是为aValue与bValue的每一组唯一组合分配独立编号rowNum2,不受rowNum和Id影响。原查询的问题在于仅按aValue分区,且ROW_NUMBER()会在分区内生成递增序号,无法实现跨分组的唯一组合编号。
以下是两种可行的正确实现方式:
方法一:使用DENSE_RANK()函数(推荐)
DENSE_RANK()会为每个唯一的(aValue, bValue)组合分配连续的编号,相同组合保持同一编号,实现最简单直接:
SELECT rowNum, Id, aValue, bValue, DENSE_RANK() OVER (ORDER BY aValue, bValue) AS rowNum2 FROM #temptable ORDER BY rowNum2, Id;
方法二:通过CTE提取唯一组合再关联
如果需要对组合的排序逻辑做更复杂的调整,可以先提取所有唯一组合并分配编号,再与原表关联:
WITH UniqueCombos AS ( SELECT DISTINCT aValue, bValue, ROW_NUMBER() OVER (ORDER BY aValue, bValue) AS rowNum2 FROM #temptable ) SELECT t.rowNum, t.Id, t.aValue, t.bValue, uc.rowNum2 FROM #temptable t JOIN UniqueCombos uc ON t.aValue = uc.aValue AND t.bValue = uc.bValue ORDER BY uc.rowNum2, t.Id;
两种方法都能生成符合要求的rowNum2,其中方法一更简洁高效,适合大多数场景。
内容的提问来源于stack exchange,提问作者ichachan
相关产品推荐
相关产品推荐

