SQL 如何合并记录?
来源:百度知道 编辑:UC知道 时间:2024/09/25 16:33:22
表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;