我有以下输入表。我需要一种聪明的方法来动态地重新编号从“ 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 |
+--+--------+--------+
答案 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 <>小提琴。