在 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.
我有以下输入 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.