SQL Server:如何为ItemID生成起始为15000的唯一编号?
解决同一ItemID生成连续唯一编号的SQL方案
没问题,这需求很清晰——给每组相同的ItemID分配一个从15000开始递增的唯一编号,同一ItemID的所有记录共用这个编号对吧?
核心思路
我们可以用窗口函数DENSE_RANK()来实现:
DENSE_RANK()会为每个唯一的ItemID生成连续的排名(不会因为重复记录跳号),默认从1开始- 把这个排名加上14999,就能让起始值变成15000,完美匹配你的需求
完整SQL语句
假设你的表名为your_table,执行以下查询即可:
SELECT seq_no, ItemId, DENSE_RANK() OVER (ORDER BY ItemId) + 14999 AS uniqueNumber FROM your_table;
验证示例数据
用你提供的测试数据跑这个语句,结果会和预期完全一致:
| seq_no | ItemId | uniqueNumber |
|---|---|---|
| 15000 | AA-00001152 | 15000 |
| 15000 | AA-00001152 | 15000 |
| 15001 | AA-00001153 | 15001 |
| 15002 | AA-00001154 | 15002 |
| 15002 | AA-00001154 | 15002 |
| 15003 | AA-00001155 | 15003 |
| 15004 | AA-00001156 | 15004 |
| 15004 | AA-00001156 | 15004 |
补充说明
如果需要按照其他逻辑(比如seq_no的顺序)来生成编号,只需要修改OVER()子句里的ORDER BY字段即可,比如改成ORDER BY seq_no也能得到相同的结果,因为你的示例里seq_no和ItemID的顺序是对应的。
内容的提问来源于stack exchange,提问作者gpr
相关产品推荐
相关产品推荐

