当前位置: 代码迷 >> Sql Server >> 一列单行数据转向一列多行
  详细解决方案

一列单行数据转向一列多行

热度:61   发布时间:2016-04-24 09:42:34.0
一列单行数据转为一列多行
某表中有一字段(FILED)存储内容格式为:内容1;内容2;内容3;内容4;......。
我现在想通过SQL语句查询出来的结果为多行单列,如下:
字段名(FILED)
    内容1
    内容2
    内容3
    内容4
      ......
请问可不可以实现呢,该怎样去写呢?
------解决思路----------------------
SELECT V FROM
(SELECT CONVERT(XML,'<V>'+REPLACE(FILED,';','</V><V>')+'</V>')VS FROM TB)T1
CROSS APPLY(SELECT N.V.value('.','NVARCHAR(50)')V FROM T1.VS.nodes('//V')N(V))T2
如果你还有其他列,不知道怎么改再说哈
------解决思路----------------------

Select 
    a.Col1,Col1=substring(a.Col1,b.number,charindex(',',a.Col1+',',b.number)-b.number) 
from 
    Tab a,master.dbo.spt_values b
where
    charindex(',',','+a.Col1,b.number)=b.number AND b.type='P'

------解决思路----------------------
改一下分隔符为";"

Select 
    a.Col1,Col1=substring(a.Col1,b.number,charindex(';',a.Col1+';',b.number)-b.number) 
from 
    Tab a,master.dbo.spt_values b
where
    charindex(';',',;'+a.Col1,b.number)=b.number AND b.type='P'

------解决思路----------------------
use Tempdb
go
--> --> 
 
if not object_id(N'Tempdb..#tableA') is null
drop table #tableA
Go
Create table #tableA([Col1] nvarchar(50))
Insert #tableA
select N'内容1;内容2;内容3;内容4;内容5'
Go

Select 
    Col1=substring(a.Col1,b.number,charindex(';',a.Col1+';',b.number)-b.number) 
from 
    #tableA a,master.dbo.spt_values b
where
    charindex(';',',;'+a.Col1,b.number)=b.number AND b.type='P'
/*
容1
容2
容3
容4
容5
*/
 
------解决思路----------------------
还有一种不需要XML的写的,版主已贴...

另外也可以,直接用动态@SQL处理
------解决思路----------------------
几天没来论坛,现在改版了,等级都变了
------解决思路----------------------
与上楼同感,是不是换领导了
------解决思路----------------------
引用:
Quote: 引用:


Select 
    a.Col1,Col1=substring(a.Col1,b.number,charindex(',',a.Col1+',',b.number)-b.number) 
from 
    Tab a,master.dbo.spt_values b
where
    charindex(',',','+a.Col1,b.number)=b.number AND b.type='P'

master.dbo.spt_values的number值最大才255(sqlserver2000),在实际应用中肯定不够,有没有值比较大的系统表呀


长度不够生成个临时表,或创建表处理,这样分拆比用XML性能要高

如:
select TOP 10000
number=IDENTITY(int,1,1) 
INTO 辅助表
from syscolumns as a,syscolumns as b,syscolumns AS c,syscolumns AS d
  相关解决方案