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

Posted Alternatives

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver使用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实现树形结构递归查询(无限极分类)

SqlServer :实现树形结构递归查询(无限极分类)

sqlserver的CTE实现递归查询

mssql sqlserver sql对使用逗号分隔的字符串 转换为数据表的另类方法实现

SQL拆分逗号分隔的字符串

如何用sqlserver 改变一个列按一定的顺序排列,