/*
标题:按某字段合并字符串之一(简单合并)
作者:大乌龟
描述:将如下形式的数据按id字段合并value字段。
id value
----- ------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
需要得到结果:
id value
------ -----------
1 aa,bb
2 aaa,bbb,ccc
即:group by id, 求 value 的和(字符串相加)
*/
--1、sql2000中只能用自定义的函数解决
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
create function dbo.f_str(@id int) returns varchar(100)
as
begin
declare @str varchar(1000)
set @str = ''
select @str = @str + ',' + cast(value as varchar) from tb where id = @id
set @str = right(@str , len(@str) - 1)
return @str
end
go
--调用函数
select id , value = dbo.f_str(id) from tb group by id
drop function dbo.f_str
drop table tb
--2、sql2005中的方法
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, [value] = stuff((select ',' + [value] from tb t where id = tb.id for xml path('')) , 1 , 1 , '')
from tb
group by id
drop table tb
--3、使用游标合并数据
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
declare @t table(id int,value varchar(100))--定义结果集表变量
--定义游标并进行合并处理
declare my_cursor cursor local for
select id , value from tb
declare @id_old int , @id int , @value varchar(10) , @s varchar(100)
open my_cursor
fetch my_cursor into @id , @value
select @id_old = @id , @s=''
while @@FETCH_STATUS = 0
begin
if @id = @id_old
select @s = @s + ',' + cast(@value as varchar)
else
begin
insert @t values(@id_old , stuff(@s,1,1,''))
select @s = ',' + cast(@value as varchar) , @id_old = @id
end
fetch my_cursor into @id , @value
END
insert @t values(@id_old , stuff(@s,1,1,''))
close my_cursor
deallocate my_cursor
select * from @t
drop table tb
分享到:
相关推荐
sybase数据库是不支持group_concat函数的,此文件为sybase存储过程样例,可以将多行信息按标识合并为一行多列。
SQLServer 中将一个字段的多个记录值合并到一行显示的实现方法 SQL Server 是一种关系型数据库管理系统,具有强大的数据处理能力和存储能力。在实际应用中,我们经常需要将一个字段的多个记录值合并到一行显示,以...
“行转列”是将数据表中的一行数据转换为多列显示,反之,“列转行”则是将一列数据转化为多行展示。这两种操作在处理宽表和长表之间的转换时特别有用,例如,当需要将多个具有相同属性的数据项合并到同一列或者将...
例如,如果有一张销售表,包含产品、月份和销售额三列,可以使用`CASE`语句将不同月份的销售额转为一列显示,以便于分析。 2. **多行补充**: 当需要将分散在多行的数据合并成一行时,可以使用`UNION`或`UNION ALL...
当我们在处理数据时,有时会遇到需要将多行数据转换为一列的情况,这被称为“行转列”操作。在本篇中,我们将深入探讨如何在MySQL中解决复杂的动态行转列问题。 首先,我们要理解行转列的基本概念。在传统的SQL查询...
例如,将不同季度的销售数据从多列转为一列显示,每个季度作为单独的行值。 2. **多行补充.sql**:这可能涉及合并多行数据,比如使用UNION或UNION ALL来组合不同的查询结果,或者在处理缺失数据时用COALESCE函数...
- 将结果集反向转置为一列:将多行数据合并为单个字段。 - 抑制结果集中的重复值:使用DISTINCT关键字。 - 利用“行转列”进行计算:在转换后的数据上进行分析计算。 - 给数据分组:使用GROUP BY子句对数据进行...
首先创建了一个名为`TEST2`的表,有三列:`id`(数值类型,长度为10),`name`(变长字符类型,最大长度为100),以及`teststr`(变长字符类型,最大长度为100)。 5. **插入数据**: 向`TEST2`表中插入了几条...
这样,一行数据被拆分为多行,实现了列转行的效果。 具体的SQL语句如下: ```sql SELECT a.f1, b.fid, DECODE(b.fid, '数据 1', a.qty1, '数据 2', a.qty2, '数据 3', a.qty3) FROM f_distribution a, (SELECT '...
通过UNION ALL操作将不同列的数据合并到同一列中。例如,表`t_col_row`包含ID和三列数据c1, c2, c3,可以使用以下SQL语句将列转为行: ```sql SELECT id, 'c1' cn, c1 cv FROM t_col_row UNION ALL SELECT id, 'c2'...
要将这些列转为行,我们可以分别选择每一列并使用 UNION 合并结果: ```sql SELECT user_name, '语文' AS COURSE, CN_SCORE AS SCORE FROM test_tb_grade2 UNION SELECT user_name, '数学' AS ...