Sql 列转行 三种方法对比
来源:互联网 发布:网络有重名 编辑:程序博客网 时间:2024/05/21 15:46
SQL code------
合并列值
--*******************************************************************************************
表结构,数据如下:
id value
----- ------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
需要得到结果:
id values
------ -----------
1 aa,bb
2 aaa,bbb,ccc
即:group by id, 求 value 的和(字符串相加)
1. 旧的解决方法(在sql server 2000中只能用函数解决。)
--=============================================================================
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go
--1. 创建处理函数
CREATE FUNCTION dbo.f_strUnite(@id int)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @str varchar(8000)
SET @str = ''
SELECT @str = @str + ',' + value FROM tb WHERE id=@id
RETURN STUFF(@str, 1, 1, '')
END
GO
-- 调用函数
SELECt id, value = dbo.f_strUnite(id) FROM tb GROUP BY id
drop table tb
drop function dbo.f_strUnite
go
/*
id value
----------- -----------
1 aa,bb
2 aaa,bbb,ccc
(所影响的行数为 2 行)
*/
--===================================================================================
2. 新的解决方法(在sql server 2005中用OUTER APPLY等解决。)
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go
-- 查询处理
SELECT * FROM(SELECT DISTINCT id FROM tb ) A OUTER APPLY (
SELECT value= STUFF(
REPLACE((
SELECT value FROM tb N
WHERE N.id = A.id
FOR XML AUTO
),' ',''), 1, 1, '') ) AS P
drop table tb
/*
id values
----------- -----------
1 aa,bb
2 aaa,bbb,ccc
(2 行受影响)
*/
--SQL2005中的方法2
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go
select id, [values]=stuff((select ','+[value] from tb t where id=tb.id for xml path('')), 1, 1, '')
from tb
group by id
/*
id values
----------- --------------------
1 aa,bb
2 aaa,bbb,ccc
(2 row(s) affected)
*/
drop table tb
- Sql 列转行 三种方法对比
- SQL 动态列转行又一方法
- SQL 列转行/list agg 列超长处理方法
- sql列转行
- sql列转行
- 列转行SQL
- sql列转行
- sql列转行
- SQL 列转行
- SQL行转列 列转行
- sql 列转行
- SQL行转列,列转行
- sql 列转行
- sql 列转行
- SQL 列转行
- SQL列转行
- 列转行sql
- SQL 列转行
- 黑马程序员——银行调度系统
- android webview cache 管理
- MySQL性能优化二十大实战经验
- QT Creator中Exited with code 2错误
- [Cocoa]深入浅出Cocoa之 Method Swizzling
- Sql 列转行 三种方法对比
- 利用正则表达式判断身份证号
- 什么是SOAP?
- NYOJ---240题小明的调查统计(二)
- sfml画地图的一种方法
- 产品如何取得WFA的WiFi认证(二)成为WFA会员
- android selector
- [转贴]JasperReport 学习之路
- SQlPlus常用设置,命令