sql 方法(长期更新中)
来源:互联网 发布:java程序设计上机实验 编辑:程序博客网 时间:2024/05/01 14:22
分拆列值
原著:邹建改编:爱新觉罗.毓华 2007-12-16 广东深圳
有表tb, 如下:id value----------- -----------1 aa,bb2 aaa,bbb,ccc欲按id,分拆value列, 分拆后结果如下:id value----------- --------1 aa1 bb2 aaa2 bbb2 ccc
1. 旧的解决方法(sql server 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, # BWHERE SUBSTRING(',' + A.[values], B.id, 1) = ','
DROP TABLE #
2. 新的解决方法(sql server 2005)
create table tb(id int,value varchar(30))insert into tb values(1,'aa,bb')insert into tb values(2,'aaa,bbb,ccc')goSELECT A.id, B.valueFROM( SELECT id, [value] = CONVERT(xml,'<root><v>' + REPLACE([value], ',', '</v><v>') + '</v></root>') FROM tb)AOUTER APPLY( SELECT value = N.v.value('.', 'varchar(100)') FROM A.[value].nodes('/root/v') N(v))B
DROP TABLE tb
/*id value----------- ------------------------------1 aa1 bb2 aaa2 bbb2 ccc
(5 行受影响)*/
表 product
id Pname Pcolor 1 p1 1,2,3 2 p2 2,3 3 p3 1,2,3 4 p4 1,2
现在想得到这么一个结果
colornum colorId
3 1 4 2 3 3
create table product (id int,Pname varchar(2),Pcolor varchar(200))insert into productselect 1,'p1','1,2,3' union allselect 2,'p2','2,3' union allselect 3,'p3','1,2,3' union allselect 4,'p4','1,2'
--查询declare @s varchar(max) set @s=''select @s=@s+Pcolor+',' from productif len(@s)>0 set @s=left(@s,len(@s)-1)select count(*)as colornum ,a as colorId from f_split(@s,',') group by a order by a
/*-------------------3 14 23 3*/
--送你split函数create function f_split(@str varchar(8000),@strseprate varchar(1)) returns @temp table(id int identity(1,1),a varchar(100)) as begin declare @i int set @str=rtrim(ltrim(@str)) set @i=charindex(@strseprate,@str) while @i>=1 begin insert @temp values(left(@str,@i-1)) set @str=substring(@str,@i+1,len(@str)-@i) --当然,这里您也可以改写为stuff,可以自己试着改写一下 set @i=charindex(@strseprate,@str) end if @str<>'/' insert @temp values(@str) return end
- sql 方法(长期更新中)
- 我工作中遇到的SQL(长期更新)
- javascript中常见问题总结(长期更新)
- linux 常用命令 (长期更新中...)
- 常用命令(长期更新)
- C++常见误区、常用方法(长期更新)
- 编程中碰到的异常以及解决方案(长期更新)
- 几个市场和价格规律(长期更新中。。)
- opencv学习中遇到的函数汇集(长期更新)
- linux vim的使用方法笔记(长期更新中)
- SQLite使用小记2015.06.03(长期更新中)
- 【Web前端】学习中遇到的问题(长期更新)
- 记录工作中遇到的一些问题(长期更新)
- Latex - 专辑 (长期更新)
- ubuntu常用命令(长期更新)
- Linux - 常用命令(长期更新)
- ACM专栏(长期更新)
- linux常用命令(长期更新)
- 小识SAS
- UML类图关系全面剖析
- sql学习笔记
- 转换成中文大写数字
- 少为人知的龙胆花
- sql 方法(长期更新中)
- Tomcat 5常用优化和配置
- IIS性能优化 - 用于 IIS 的 Http.sys 注册表设置
- 字符串处理
- JSP中文件下载(转贴)
- VS.NET2005 CrystalReport PrintMode(转)
- 验证
- VS 2005快捷键
- 转换函数