[转]用 SQL 语句对一行数据拆分成多行的方法
2009-08-14 12:09
381 查看
有时候我们也许对一行数据拆分成多行的操作,例如:
拆分成
下面给出几个经常用到的方法:
Col1 COl2 ----------- ------------ 1 a,b,c 2 d,e 3 f
拆分成
Col1 COl2 ----------- ----- 1 a 1 b 1 c 2 d 2 e 3 f
下面给出几个经常用到的方法:
SQL2000用辅助表:
if object_id('Tempdb..#Num') is not null
drop table #Num
go
select top 100 ID=Identity(int,1,1) into #Num from syscolumns a,syscolumns b
Select
a.Col1,COl2=substring(a.Col2,b.ID,charindex(',',a.Col2+',',b.ID)-b.ID)
from
Tab a,#Num b
where
charindex(',',','+a.Col2,b.ID)=b.ID --也可用 substring(','+a.COl2,b.ID,1)=','
drop table #Num
go
select top 100 ID=Identity(int,1,1) into #Num from syscolumns a,syscolumns b
Select
a.Col1,COl2=substring(a.Col2,b.ID,charindex(',',a.Col2+',',b.ID)-b.ID)
from
Tab a,#Num b
where
charindex(',',','+a.Col2,b.ID)=b.ID --也可用 substring(','+a.COl2,b.ID,1)=','
SQL2005用Xml:
select
a.COl1,b.Col2
from
(select Col1,COl2=convert(xml,'<root><v>'+replace(COl2,',','</v><v>')+'</v></root>') from Tab)a
outer apply
(select Col2=C.v.value('.','nvarchar(100)') from a.COl2.nodes('/root/v')C(v))b
a.COl1,b.Col2
from
(select Col1,COl2=convert(xml,'<root><v>'+replace(COl2,',','</v><v>')+'</v></root>') from Tab)a
outer apply
(select Col2=C.v.value('.','nvarchar(100)') from a.COl2.nodes('/root/v')C(v))b
SQL05用CTE:
;with roy as
(select Col1,COl2=cast(left(Col2,charindex(',',Col2+',')-1) as nvarchar(100)),Split=cast(stuff(COl2+',',1,charindex(',',Col2+','),'') as nvarchar(100)) from Tab
union all
select Col1,COl2=cast(left(Split,charindex(',',Split)-1) as nvarchar(100)),Split= cast(stuff(Split,1,charindex(',',Split),'') as nvarchar(100)) from Roy where split>''
)
select COl1,COl2 from roy order by COl1 option (MAXRECURSION 0)
转自:http://www.cqun.com/2009/04/sql.html
(select Col1,COl2=cast(left(Col2,charindex(',',Col2+',')-1) as nvarchar(100)),Split=cast(stuff(COl2+',',1,charindex(',',Col2+','),'') as nvarchar(100)) from Tab
union all
select Col1,COl2=cast(left(Split,charindex(',',Split)-1) as nvarchar(100)),Split= cast(stuff(Split,1,charindex(',',Split),'') as nvarchar(100)) from Roy where split>''
)
select COl1,COl2 from roy order by COl1 option (MAXRECURSION 0)
转自:http://www.cqun.com/2009/04/sql.html
相关文章推荐
- 用 SQL 语句对一行数据拆分成多行的方法
- SQL 语句行数据拆成多行及多行数据合并成一行的方法
- SQL 语句一行拆成多行及多行合并成一行的方法
- T_SQL 将一列多行数据合并为一行
- excel内一键进行sql查询(使用方法 1.选择’需要进行sql查询区域 包括字段名 2 输入sql语句 3.选择输出数据的单元格)
- Oracle:一条SQL实现将多行数据并为一行显示
- SQL一行以某個字符拆分多行
- phpmyadmin里面导入sql语句格式的大量数据的方法
- SQL - 数据查询语句之字符串拆分
- SQL语句:orac 3ff0 le中如何插入Date类型的数据和根据Date数据进行查询的方法
- mysql的sql语句中直接计算时间 查询昨天 一周前 一月前 一年前的数据的方法
- SQL 语句 数据分页方法
- sql语句把一张表中一行数据复制到…
- SQL不重复查找数据及把一列多行内容拼成一行
- 用SQL语句把表中的数据由行变为列(方法一)
- sql中一次性插入多行数据的方法汇总收藏
- 用SQL语句实现随机查询数据并不显示错误数据的方法
- SQL语句分组获取记录的第一条数据的方法
- SQL 语句,输入N,取出前N个数据方法
- sql 中将一行数据分成多行显示