请教数据结果按照某个字段一定的顺序重复出现
时间:2011-12-08
来源:互联网
上个帖子问题不清楚,重新发,请见谅,分统一结
现有的标结构为 docid,doctitle,docname,docdesc,docsmark
1, hello,a,b,c
2, nihao,,w,e,f
3,你好,g,t,h
...
1200,喂,o,p,u
如果输入参数 docid 的串为 1,3,3,1200,2,1
那么返回的结果为:
1, hello,a,b,c
3,你好,g,t,h
3,你好,g,t,h
1200,喂,o,p,u
2, nihao,,w,e,f
1, hello,a,b,c
一是数据需要重复出现, 二是结果的排列按照 传入的参数串 数字排列
上个帖子问题不清楚,重新发,请见谅
现有的标结构为 docid,doctitle,docname,docdesc,docsmark
1, hello,a,b,c
2, nihao,,w,e,f
3,你好,g,t,h
...
1200,喂,o,p,u
如果输入参数 docid 的串为 1,3,3,1200,2,1
那么返回的结果为:
1, hello,a,b,c
3,你好,g,t,h
3,你好,g,t,h
1200,喂,o,p,u
2, nihao,,w,e,f
1, hello,a,b,c
一是数据需要重复出现, 二是结果的排列按照 传入的参数串 数字排列
上个帖子问题不清楚,重新发,请见谅
作者: chilli6519 发布时间: 2011-12-08
SQL code
create table tb(docid int,doctitle nvarchar(10)) insert into tb select 1,'hello' insert into tb select 2,'nihao' insert into tb select 3,'你好' insert into tb select 120,'你好aaaa' declare @str varchar(2000)='1,3,3,120,2,1' set @str='select a.* from tb a,(select '+REPLACE(@str,',',' as id union all select ') +') b where a.docid=b.id' print @str exec (@str) /* docid doctitle ----------- ---------- 1 hello 3 你好 3 你好 120 你好aaaa 2 nihao 1 hello
作者: ssp2009 发布时间: 2011-12-08
order by charindex(','+ltrim(docid)+',',',1,3,3,1200,2,1,')
作者: fredrickhu 发布时间: 2011-12-08
考虑错了 应该拆分传入的字符串 然后与你的表关联
作者: fredrickhu 发布时间: 2011-12-08
SQL code
方法都在这里 就不写了
use tempdb go --测试数据 declare @s varchar(1000) set @s='ak47,mp5,1,23' /*要求输出结果 S ---- ak47 mp5 1 23 */ --3种方法对比: --1.[朴实]动态Exec方法: declare @s1 varchar(1000) set @s1=right(replace(','+@s,',',''' as S union select '''),len(replace(','+@s,',',''' as S union select '''))-12)+'''' exec(@s1) --2.[变通]表交叉方法: select replace(reverse((left(s,charindex(',',s)))),',','') as S from( select r,reverse(left(@s,r))+',' as s from( select (select count(*) from sysobjects where name<=t.name ) as r from sysobjects t )a where r<=len(@s) and left(@s+',',r+1) like '%,' )t order by r --3.[高级]XML方法: DECLARE @idoc int; DECLARE @doc xml; set @doc=cast('<Root><item><S>'+replace(@s,',','</S></item><item><S>')+'</S></item></Root>' as xml) EXEC sp_xml_preparedocument @Idoc OUTPUT, @doc SELECT * FROM OPENXML (@Idoc, '/Root/item',2) WITH ( [S] varchar(10) )
方法都在这里 就不写了
作者: fredrickhu 发布时间: 2011-12-08
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28