合并列值
表结构,数据如下: id value
----- ------
aa
bb
aaa
bbb
ccc 需要得到结果:
id values
------ -----------
aa,bb
aaa,bbb,ccc
即:group by id, 求 value 的和(字符串相加) . 旧的解决方法(在sql server 2000中只能用函数解决。)
--. 创建处理函数
create table tb(id int, value varchar())
insert into tb values(, 'aa')
insert into tb values(, 'bb')
insert into tb values(, 'aaa')
insert into tb values(, 'bbb')
insert into tb values(, 'ccc')
go CREATE FUNCTION dbo.f_str(@id int)
RETURNS varchar()
AS
BEGIN
DECLARE @r varchar()
SET @r = ''
SELECT @r = @r + ',' + value FROM tb WHERE id=@id
RETURN STUFF(@r, , , '')
END
GO -- 调用函数
SELECt id, value = dbo.f_str(id) FROM tb GROUP BY id drop table tb
drop function dbo.f_str /*
id value
----------- -----------
1 aa,bb
2 aaa,bbb,ccc
(所影响的行数为 2 行)
*/ --、另外一种函数.
create table tb(id int, value varchar())
insert into tb values(, 'aa')
insert into tb values(, 'bb')
insert into tb values(, 'aaa')
insert into tb values(, 'bbb')
insert into tb values(, 'ccc')
go --创建一个合并的函数
create function f_hb(@id int)
returns varchar()
as
begin
declare @str varchar()
set @str = ''
select @str = @str + ',' + cast(value as varchar) from tb where id = @id
set @str = right(@str , len(@str) - )
return(@str)
End
go --调用自定义函数得到结果:
select distinct id ,dbo.f_hb(id) as value from tb drop table tb
drop function dbo.f_hb /*
id value
----------- -----------
1 aa,bb
2 aaa,bbb,ccc
(所影响的行数为 2 行)
*/ . 新的解决方法(在sql server 2005中用OUTER APPLY等解决。)
create table tb(id int, value varchar())
insert into tb values(, 'aa')
insert into tb values(, 'bb')
insert into tb values(, 'aaa')
insert into tb values(, 'bbb')
insert into tb values(, 'ccc')
go
-- 查询处理
SELECT * FROM(SELECT DISTINCT id FROM tb)A OUTER APPLY(
SELECT [values]= STUFF(REPLACE(REPLACE(
(
SELECT value FROM tb N
WHERE id = A.id
FOR XML AUTO
), '<N value="', ','), '"/>', ''), , , '')
)N
drop table tb /*
id values
----------- -----------
1 aa,bb
2 aaa,bbb,ccc (2 行受影响)
*/ --SQL2005中的方法2
create table tb(id int, value varchar())
insert into tb values(, 'aa')
insert into tb values(, 'bb')
insert into tb values(, 'aaa')
insert into tb values(, 'bbb')
insert into tb values(, 'ccc')
go select id, [values]=stuff((select ','+[value] from tb t where id=tb.id for xml path('')), , , '')
from tb
group by id /*
id values
----------- --------------------
1 aa,bb
2 aaa,bbb,ccc (2 row(s) affected) */ drop table tb 拆分列值
有表tb, 如下:
id value
----------- -----------
aa,bb
aaa,bbb,ccc
欲按id,分拆value列, 分拆后结果如下:
id value
----------- --------
aa
bb
aaa
bbb
ccc . 旧的解决方法(sql server )
SELECT TOP id = IDENTITY(int, , ) 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, ) = ',' DROP TABLE # . 新的解决方法(sql server ) create table tb(id int,value varchar())
insert into tb values(,'aa,bb')
insert into tb values(,'aaa,bbb,ccc')
go
SELECT A.id, B.value
FROM(
SELECT id, [value] = CONVERT(xml,'<root><v>' + REPLACE([value], ',', '</v><v>') + '</v></root>') FROM tb
)A
OUTER APPLY(
SELECT value = N.v.value('.', 'varchar(100)') FROM A.[value].nodes('/root/v') N(v)
)B DROP TABLE tb /*
id value
----------- ------------------------------
1 aa
1 bb
2 aaa
2 bbb
2 ccc (5 行受影响)
*/

http://www.wonima.com

SQL 合并列值和拆分列值的更多相关文章

  1. sql 合并列

    1.合并一列用“ ,”号隔开. 如下图: 这样的一列我想直接在sql里面合并最后变成:586,444,444,444,444这样的效果,平常的做法是直接把这列数据取出来,在前端循环加上逗号,但其实是可 ...

  2. sql合并列

    oralce写法: select WM_CONCAT(A.title) as citys from tmpcity A sql server写法: select stuff((select ','+A ...

  3. 用sql合并列,两句话合为一句

    合并bc两列 UPDATE `test` SET `a`=concat(`b`,`c`) 清空a列 UPDATE `test` SET `a` = NULL

  4. SQL语法集锦三:合并列值与分拆列值

    本文转载http://www.cnblogs.com/lxblog/archive/2012/09/29/2708724.html 在SQL中分拆列值和合并列值老生常谈了,从网上搜刮了一下并记录下来, ...

  5. SQL(横表和纵表)行列转换,PIVOT与UNPIVOT的区别和使用方法举例,合并列的例子

    使用过SQL Server 2000的人都知道,要想实现行列转换,必须综合利用聚合函数和动态SQL,具体实现起来需要一定的技巧,而在SQL Server 2005中,使用新引进的关键字PIVOT/UN ...

  6. SQL<>0查询不到NUll的值

    这几天遇到这样一个问题,sql中写<>0,刚好某个记录是NULL,道理上是满足<>0的啊,可是就是抽不出来,关于这个问题,到处找了点资料,算是这里 写一个总结出来. 用java ...

  7. sql 中获取最后生成的标识值 IDENT_CURRENT ,@@IDENTITY ,SCOPE_IDENTITY 的用法和区别

    原文:sql 中获取最后生成的标识值 IDENT_CURRENT ,@@IDENTITY ,SCOPE_IDENTITY 的用法和区别 IDENT_CURRENT 返回为任何会话和任何作用域中的指定表 ...

  8. SQL查询多条不重复记录值简要解析【转载】

    转载http://hi.baidu.com/my_favourate/item/3716b0cbe125f312505058eb SQL查询多条不重复记录值简要解析2008-02-28 11:36 以 ...

  9. EF5中 执行 sql语句使用Database.ExecuteSqlCommand 返回影响的行数 ; EF5执行sql查询语句 Database.SqlQuery 带返回值

    一: 执行sql语句,返回受影响的行数 在mysql里面,如果没有影响,那么返回行数为  -1 ,sqlserver 里面  还没有测试过 using (var ctx = new MyDbConte ...

随机推荐

  1. PostgreSQL学习手册

    事实上之前有很长一段时间都在纠结是否有必要好好学习它,但是始终都没有一个很好的理由说服自己.甚至是直到这个项目最终决定选用PostgreSQL 时,我都没有真正意识到学习它的价值,当时只是想反正和其它 ...

  2. [妙味JS基础]第五课:函数传参、重用、价格计算

    知识点总结 函数传参,传的参数=数据类型(即:数值.字符串.布尔.函数.对象.未定义) 通过传参来重用代码 1.尽量保证 HTML 代码结构一致,可以通过父级选取子元素 2.把核心主程序实现,用函数包 ...

  3. lua中获取时间

    os.date()    返回  XX/XX/XX XX:XX:XX 月/日/年    时:分:秒 os.time()   返回的是从1970年1月1日到现在的经过的秒数. 例如: print(os. ...

  4. Qt5 OpenGL框架

    #ifndef MYRENDERER_H #define MYRENDERER_H #include <QOpenGLContext> #include <QOpenGLFuncti ...

  5. 分页加载的Fragment

    package com.z.fragment; import android.os.Bundle; import android.os.Environment; import android.supp ...

  6. C# 语言规范_版本5.0 (第1章 介绍)

    1. 介绍 C#(读作“See Sharp”)是一种简洁.现代.面向对象且类型安全的编程语言.C# 起源于 C 语言家族,因此,对于 C.C++ 和 Java 程序员,可以很快熟悉这种新的语言.C# ...

  7. 常用 NHibernate.Criterion

    Expression.Where<ScreenView>((v) => v.bizType != 0);

  8. 星语硬件检测专家 V4.3 官方版

    软件名称: 星语硬件检测专家 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 15.8MB 图片预览: 软件简介: 星语硬件检测专家是一款功能非常强大的硬件 ...

  9. k近邻模型

    k近邻模型主要包含三个基本要素:距离度量.k值的选择.分类决策规则 模型: k近邻法中,当训练集.距离度量.k值及分类决策规则确定后,对于一个新的输入实例,它所属的类唯一确定,这相当于根据上述要素将特 ...

  10. js控制日期选择框datetime-local和select的展开

    注: js控制元素展开不受元素css属性的限制,例如opacity,z-index等 1. 使用js控制日期选择框的展开 ios: document.querySelector(".targ ...