在SQL Server中从“ 1”开始重新编号摘要部分字段

时间:2019-05-11 10:43:11

标签: sql sql-server string stored-procedures varchar

我有以下输入表。我需要一种聪明的方法来动态地重新编号从“ 01”开始的父节索引,并在新列中显示它们。

我正在使用SQL Server 2014 Express SP2

MyTable

ID      Integer
SECTION Varchar

查询:

SELECT * FROM MyTable

结果:

+--+--------+
|ID|SECTION |
+--+--------+
|1 |03      |
|2 |03.01   |
|3 |03.01.01|
|4 |03.02   |
|5 |03.03   |
|6 |04      |
|7 |04.01   |
|8 |04.02   |
|9 |05      |
+--+--------+

这是我要通过选择或过程实现的目标:

+--+--------+--------+
|ID|SECTION |NEWSECT |
+--+--------+--------+
|1 |03      |01      |
|2 |03.01   |01.01   |
|3 |03.01.01|01.01.01|
|4 |03.02   |01.02   |
|5 |03.03   |01.03   |
|6 |04      |02      |
|7 |04.01   |02.01   |
|8 |04.02   |02.02   |
|9 |05      |03      |
+--+--------+--------+

1 个答案:

答案 0 :(得分:1)

这只是字符串操作:

select t.*,
       stuff(section, 1, 2,
             right(concat('00', dense_rank() over (order by left(section, 2))), 2)
            )
from t;

我的意思是,dense_rank()正在为主要部分重新编号。剩下的只是将价值带到您的section中。

Here是db <>小提琴。