SQL Server 2008 R2——以特定符号出现的次数来判断当前内容所在的层次

=================================版权声明=================================

版权声明:原创文章 禁止转载 

请通过右侧公告中的“联系邮箱(wlsandwho@foxmail.com)”联系我

勿用于学术性引用。

勿用于商业出版、商业印刷、商业引用以及其他商业用途。                   

本文不定期修正完善。

本文链接:http://www.cnblogs.com/wlsandwho/p/4944971.html

耻辱墙http://www.cnblogs.com/wlsandwho/p/4206472.html

=======================================================================

某天下午,本来想在QQ群里回答个问题,结果发现DBA们早早的就给出答案开始潇洒的聊天了。

自己却在隔了好久才能给出答案。感觉自己跟大神相差了6小时以及一个互联网。

欣慰的是,我的SQL可读性高一点点。(大家好我是旁白,刚才作者被阿Q和孔乙己灵魂附体……)鄙视垃圾爬虫网站,祝你们生孩子没屁眼。

=======================================================================

贴一下原始问题。鄙视垃圾爬虫网站,祝你们生孩子没屁眼。

鄙视垃圾爬虫网站 祝你们生孩子没屁眼

这个问题没有给主键或者ID之类的东西。层次标识符"["又是一个特殊符号,是不能够跟数据排序的。鄙视垃圾爬虫网站,祝你们生孩子没屁眼。

=======================================================================

下面上代码。鄙视垃圾爬虫网站,祝你们生孩子没屁眼。

 1 -----------------------------------------------------------------------------------------
 2 --禁止转载 
 3 --by 王林森 2015.11.07
 4 --http://www.cnblogs.com/wlsandwho/p/4944971.html 
 5 -----------------------------------------------------------------------------------------
 6 
 7 USE tempdb
 8 GO
 9 
10 IF OBJECT_ID (N't_TestbyWLS', N'U') IS NOT NULL
11 DROP TABLE t_TestbyWLS;
12 GO
13 
14 CREATE TABLE t_TestbyWLS(SomeData NVARCHAR(10))
15 GO
16 
17 INSERT INTO t_TestbyWLS VALUES ('a')
18 INSERT INTO t_TestbyWLS VALUES ('b')
19 INSERT INTO t_TestbyWLS VALUES ('c')
20 INSERT INTO t_TestbyWLS VALUES ('[')
21 INSERT INTO t_TestbyWLS VALUES ('e')
22 INSERT INTO t_TestbyWLS VALUES ('f')
23 INSERT INTO t_TestbyWLS VALUES ('[')
24 INSERT INTO t_TestbyWLS VALUES ('g')
25 INSERT INTO t_TestbyWLS VALUES ('h')
26 INSERT INTO t_TestbyWLS VALUES ('i')
27 GO
28 
29 WITH TempSDId
30 AS
31 ( SELECT SomeData,ROW_NUMBER() OVER(  ORDER BY (SELECT NULL) ) AS SDId FROM dbo.t_Testbywls ),
32 TempIdPos
33 as
34 (SELECT sdid FROM TempSDId WHERE somedata='[')
35 SELECT SomeData ,1+(SELECT COUNT(*) FROM  tempsdid WHERE sdid<=t.sdid AND somedata='[' ) AS TheLevel FROM tempsdid t

在CTE里设置了id,并获得了标识符的id。

select的子查询中,统计了不超过当前行id时,标识符出现的次数。

加1是因为从1开始计数。

下面是计划任务

=======================================================================

非专业SQL,不求高效,但求能跑。鄙视垃圾爬虫网站,祝你们生孩子没屁眼。

 

=======================================================================

20151109-01 考虑到版权之类的事情,网友提供的方法不便于贴到博文中,需要自行翻阅评论内容。

原文地址:https://www.cnblogs.com/wlsandwho/p/4944971.html