如何将值追加到新列中的现有值

时间:2019-02-13 11:14:38

标签: sql-server

我的表中有多个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。请尽快给我。

2 个答案:

答案 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 

Online Demo