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

Renumbering a summary section field starting from "1" in SQL Server

我有以下输入 table。我需要一种聪明的方法来从“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      |
+--+--------+

这是我试图通过我的 select 或程序实现的目标:

+--+--------+--------+
|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      |
+--+--------+--------+

这只是字符串操作:

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<>fiddle.