好贷网好贷款

SQL一个字段以分格符分成N行怎么写 20jsntzhj]

发布时间:2016-12-5 10:30:56 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"SQL一个字段以分格符分成N行怎么写 20jsntzhj]",主要涉及到SQL一个字段以分格符分成N行怎么写 20jsntzhj]方面的内容,对于SQL一个字段以分格符分成N行怎么写 20jsntzhj]感兴趣的同学可以参考一下。

一个表 1 keven a,b,c 2 nike a,b 3 mical b 我要查询成这样 keven a keven b keven c nike a nike b mical b 这个怎么写 sql2008有人给出答案,我在2000前提下

拆分列.

2000 用拆分函数.

有表tb, 如下: id value ----------- ----------- 1 aa,bb 2 aaa,bbb,ccc 欲按id,分拆value列, 分拆后结果如下: id value ----------- -------- 1 aa 1 bb 2 aaa 2 bbb 2 ccc 2000的解决方法 SELECT TOP 8000 id = IDENTITY(int, 1, 1) INTO # FROM syscolumns a, syscolumns b   SELECT A.id, SUBSTRING(A.[values], B.id, CHARINDEX(',', A.[values] + ',', B.id) - B.id) FROM tb A, # B WHERE SUBSTRING(',' + A.[values], B.id, 1) = ',' DROP TABLE #

--参考 拆分表: --> --> (Roy)生成測試數據   if not object_id('Tab') is null     drop table Tab Go Create table Tab([Col1] int,[COl2] nvarchar(5)) Insert Tab select 1,N'a,b,c' union all select 2,N'd,e' union all select 3,N'f' Go --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)=',' --2000不使用辅助表 Select     a.Col1,COl2=substring(a.Col2,b.number,charindex(',',a.Col2+',',b.number)-b.number)  from      Tab a join master..spt_values  b      ON B.type='p' AND B.number BETWEEN 1 AND LEN(A.col2) where      substring(','+a.COl2,b.number,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 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) 生成结果: /* Col1        COl2 ----------- ----- 1           a 1           b 1           c 2           d 2           e 3           f */

多谢,终于完成了

上一篇:sql 存储过程中字段可以做参数吗? 40q312977]
下一篇:SQL查询多值字段中的值 50nanyida0416sushe]

相关文章

相关评论