为 SQL Server 中的每个唯一编号分配新值

Posted

技术标签:

【中文标题】为 SQL Server 中的每个唯一编号分配新值【英文标题】:Assign new value to every unique number in SQL Server 【发布时间】:2020-10-09 07:30:54 【问题描述】:

我是 SQL Server 新手,正在尝试做一些操作

样本数据:

Amount | BillID
-------+-------
 500   | 10009
 500   |  1492
 350   | 15892
 222   | 15596
 899   | 20566
 350   |  9566

如何根据Amount 列创建一个包含序列号的新列,以便输出如下所示:

Amount | BillID | unique
-------+--------+-------
 500   |  10009 |   1
 500   |   1492 |   1
 350   |  15892 |   2
 222   |  15596 |   3
 899   |  20566 |   4
 350   |   9566 |   2

【问题讨论】:

【参考方案1】:

我会推荐dense_rank()

select t.*, dense_rank() over(order by amount) rn
from mytable t

这会为每个amount 分配一个唯一的递增编号。最小的数量获得排名1,并通过增加amount 递增分配数量。这不完全是您显示的输出(没有明显的排序逻辑逻辑),但我认为这就是您本质上想要的逻辑。

【讨论】:

以上是关于为 SQL Server 中的每个唯一编号分配新值的主要内容,如果未能解决你的问题,请参考以下文章

为数组中的变量分配新值的forEach循环不会替换变量的值[重复]

如何在 SQL Server 中生成唯一递增的整数值?

从 SQL 获取列中的最后一个单元格

如何为 Spark RDD 中的元素分配唯一的连续编号

SQL Server标识列重新编号[重复]

SQL server 建立的触发器子查询返回值不唯一,需要用多个返回值如何操作