SQL 如何合并记录?

来源:百度知道 编辑:UC知道 时间:2024/09/25 16:33:22
SQL如何实现以下功能:
表1

字段1(数字) 字段2(字符)
1978 87#23%
1978 87#23% (备注:此行重复,在下面查询时,只显示一个)
1978 983@43
1978 9!8673
1978 6564*3
1978 324&64
1978 95^693
1988 11$113
1988 13#413
1988 456+12
1988 11-323

实现结果:
字段1(数字) 字段2(字符)
1978 87#23%,983@43,9!8673,6564*3,324&64,95^693
1988 11$113,13#413,456+12,11-323

以上查询如何通过SQL语句实现?

建立一个函数来生成指定Id对应的字段2生成值,如下:
CREATE FUNCTION [dbo].[getValue]
(@Id int )
returns varchar(8000)
as
BEGIN

DECLARE @str varchar(8000)
SELECT @str = ''

--从表1中取出不重复的字段2,以字段1进行过滤,组合字符串
SELECT @str = @str + CASE WHEN @str='' THEN '' ELSE ',' END + ISNULL([Field2],'')
FROM
(
SELECT DISTINCT [Field2]
FROM Table1
WHERE [Field1]=@Id
) A

--返回生成的字段2的组合结果
RETURN @str
END

使用此函数进行查询:
SELECT DISTINCT [Field1],[dbo].[getValue]([Field1])
FROM Table1

目前只有用函数来实现,暂时还没有其它办法

刚才试了试没做出来,一会接着试

select * from table
where 字段 in (select 字段 from table group by 字段 having count(字段) > 1)

楼上那么写的话,那些只有一条数据的就找不到了,并且重复你用IN 重复的数据还是全集。
select 字段1, 字段2 from table
group by 字段1, 字段2
having count(*)>1
union
select 字段1, 字段2 from table
group by 字段1, 字段2
having count(*)=1;