我的表中有多个ID,我必须附加值00,01,02 ... 99。
id
1768053
1768054
1768055
1768059
1771340
1771341
1771342
1771343
1771344
1771345
1771346
1771347
1771348
1774628
1774629
1768053
1768054
1768055
1768059
1771340
1771341
1771342
1771343
1771344
1771345
1771346
1771347
1771348
1774628
1774629
1768053
1768054
1768055
1768059
1771340
1771341
1771342
1771343
1771344
1771345
1771346
1771347
1771348
1774628
1774629
在上面,我说明了我的桌子上有身份证的情况。
id newid
1768053 176805300
1768053 176805301
1768053 176805302
1768053 176805303
. .
. .
. .
. .
1768053 176805399
我想要上面在sql中显示的newid。请尽快给我。
答案 0 :(得分:1)
您可以使用ROW_NUMBER() OVER (PARTITION BY id)
:
SELECT id
, id * 100 + ROW_NUMBER() OVER (PARTITION BY id ORDER BY (SELECT NULL)) - 1 AS newid
FROM t
示例输出:
| id | newid |
|---------|-----------|
| 1768053 | 176805300 |
| 1768053 | 176805301 |
| 1768053 | 176805302 |
| 1768054 | 176805400 | <- resets to 0
| 1768054 | 176805401 |
| 1768054 | 176805402 |
| 1768055 | 176805500 | <- resets to 0
| 1768055 | 176805501 |
这假设您针对特定ID的重复项不超过100,例如值1768053不能重复超过100次,否则请乘以1000。
答案 1 :(得分:0)
对于VARCHAR
数据类型,您可以尝试如下操作。
SELECT id + Replicate('0', 2-Len(rn)) + rn AS NewId
FROM (SELECT id,
Cast(Row_number() OVER(PARTITION BY ID ORDER BY id) - 1 AS VARCHAR) RN
FROM [yourtablename])t