求一SQL语句的多种方案,一经解决立刻给分!解决方法
发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
求一SQL语句的多种方案,一经解决立刻给分!
现有表A
ID Name Class
-------------------
12 a 34||35||36
13 b 34||36
14 c 33||34
15 d 34||35
16 e 34
17 f 34||37
求一SQL语句,希望能够得到下列查询结果:
ID Name Class
------------------
12 a 34
12 a 35
12 a 36
13 b 34
13 b 36
14 c 33
14 c 34
15 d 34
15 d 35
16 e 34
17 f 34
18 f 37
如果能够提供多种方案更好,解决后立刻给分!
------解决方案--------------------
--建个函数,以下为引用
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
DECLARE @splitlen int
SET @splitlen=LEN(@split)-1
WHILE CHARINDEX(@split,@s)> 0
BEGIN
INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen, ' ')
END
INSERT @re VALUES(@s)
RETURN
END
------解决方案--------------------
create table T(ID int, Name char(1), Class varchar(50))
insert T select 12, 'a ', '34||35||36 '
union all select 13, 'b ', '34||36 '
union all select 14, 'c ' , '33||34 '
union all select 15, 'd ', '34||35 '
union all select 16, 'e ', '34 '
union all select 17, 'f ', '34||37 '
declare @sql varchar(8000)
set @sql= ' '
declare @ID int, @Name char(1), @Class varchar(50)
declare T_cursor cursor for
select ID, Name, Class from T
open T_cursor
fetch next from T_cursor into @ID, @Name, @Class
while @@fetch_status=0
begin
select @sql=@sql+ ' select '+rtrim(@ID)+ ', ' ' '+@Name+ ' ' ', '
select @sql=@sql+replace(@Class, '|| ', ' union all select '+rtrim(@ID)+ ', ' ' '+@Name+ ' ' ', ')
select @sql=@sql+ ' union all '
fetch next from T_cursor into @ID, @Name, @Class
end
select @sql=left(@sql, len(@sql)-9)
exec(@sql)
close T_cursor
deallocate T_cursor
------解决方案--------------------
SQL2005方法:
建立字符串分割函数,然后用cross apply 进行关联
引用:/*
jacobsan(梅) ( ) 信誉:100 Blog 2007-1-2 15:40:14 得分: 0
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
从 Excel 导入到 SQL 的大数据效率问题
导入数据量:10W。
环境:Sql server 2008 R2
导入用时 29分钟。
每条执行语句:
IF EXIS...
-
链接服务器 删除时,提示 提供程序内存不足
链接服务器连一个oracle 数据库
表 tb 其中一个列是 blob
现在删除 tb 的一行...
-
一个简单的存储过程报错,求大神指教
--Drop PROCEDURE [dbo].[FenYe]
CREATE PROCEDURE [dbo].[FenYe]
@curPage int, --当...
-
如何在调试时清除临时表
用临时表时碰到错误
Msg 2714, Level 16, State 6, Line 3
There is already an object named '#TblPr...
-
还原数据库时,出现怪事了....
我用的SQL的版本是 Microsoft Corporation 版本8.0
企业管理器---找到相应的数据库名---右键---...
-
动态列!急!
下面的存储是我举例子的,并不正确!我想实现当我输入参数,2012,1,2012,12 的时候,Ytd就
得到那参数区间的和,问题就在,如...
-
为庆祝PASS北京分会成立,12月份在微软中国举办第一次线下活动。欢迎报名!
The Professional Association for SQL Server (简称PASS...
-
关于数据分页问题。
朋友说,微软自带的ListView数据分页不能使用,效率太低,查询要把整个数据库查一遍,说是要Row_Number。
那么Row_N...
-
sql查询优化
表 table 有24个字段,3万条数据,现在我查询该表的所有数据
select * from table order by id
查询时间在1分20秒左右...
-
sql 多张表的列合并成一条数据
比如
A表 有下列
name stock(库存)
苹果 10
香蕉 20
B表
name import(入库)
苹果...