码迷,mamicode.com
首页 > 数据库 > 详细

sqlserver使用cte实现某列按字符分隔成多行

时间:2017-10-31 14:24:45      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:sqlserver   recursion   art   arch   weight   div   cte   部分   就是   

标题响了半天还是觉得词不达意。

实际上有这么条数据

技术分享

要变成如下的多条

技术分享

代码:

;WITH roy AS 
    (SELECT 
        [DataRowStartIndex] ,
        [DataRowEndIndex] ,
        [DataColumnStartIndex] ,
        [DataColumnEndIndex] ,
        [Separator],
        [SheetName]=CAST(left([SheetName],CHARINDEX(,,[SheetName]+,)-1) AS nvarchar(100)), 
        Split=CAST(STUFF([SheetName]+,,1,CHARINDEX(,,[SheetName]+,),‘‘) AS NVARCHAR(100))
    FROM AccessTypeForExcel
    UNION ALL 
    SELECT 
        [DataRowStartIndex] ,
        [DataRowEndIndex] ,
        [DataColumnStartIndex] ,
        [DataColumnEndIndex] ,
        [Separator],
        [SheetName]=CAST(left(Split,CHARINDEX(,,Split)-1) AS NVARCHAR(100)), 
        Split= CAST(STUFF(Split,1,CHARINDEX(,,Split),‘‘) AS NVARCHAR(100))
    FROM Roy
    WHERE split>‘‘)
SELECT 
        [DataRowStartIndex] ,
        [DataRowEndIndex] ,
        [DataColumnStartIndex] ,
        [DataColumnEndIndex] ,
        [Separator],
        [SheetName]
FROM roy
OPTION (MAXRECURSION 0) 

这个就是按照","分割字符串,

每次分成第一个逗号前([sheetname])的和之后的部分(split),

然后自联,

拿上次余下的部分(split)继续重复前次的分割操作,

直到不满足split>‘‘这个条件时,一条数据就算分割好了

 

sqlserver使用cte实现某列按字符分隔成多行

标签:sqlserver   recursion   art   arch   weight   div   cte   部分   就是   

原文地址:http://www.cnblogs.com/suzu/p/7760990.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!