日期:2014-05-19  浏览次数:20571 次

怎么样合并一个表里面的的多行数据(如果不重复则合并,如果重复则舍弃)?
测试数据
编号       物料类别         产品编号
1               铅笔                 0001
2               铅笔                 0002
3               铅笔                 0001
4               钢笔                 0004
5               钢笔                 0005
6               钢笔                 0004
7               圆珠笔             0007
8               圆珠笔             0008
9               圆珠笔             0007

等等

要求实现以下效果:
编号         物料类别       产品编号  
1               铅笔               0001,0002
2               钢笔               0004,0005
3               圆珠笔           0007,0008

**我的目的是如果不重复则合并产品编号,如果重复则舍弃**

请问如何实现!!!!!???


------解决方案--------------------
create table T(编号 int, 物料类别 nvarchar(10), 产品编号 char(5))
insert T select 1, '铅笔 ', '0001 '
union all select 2, '铅笔 ', '0002 '
union all select 3, '铅笔 ', '0001 '
union all select 4, '钢笔 ', '0004 '
union all select 5, '钢笔 ', '0005 '
union all select 6, '钢笔 ', '0004 '
union all select 7, '圆珠笔 ', '0007 '
union all select 8, '圆珠笔 ', '0008 '
union all select 9, '圆珠笔 ', '0007 '

create function fun(@物料类别 nvarchar(10))
returns nvarchar(200)
as
begin
declare @re nvarchar(200)
set @re= ' '
select @re=@re+产品编号+ ', ' from T where 物料类别=@物料类别 group by 产品编号

select @re=left(@re, len(@re)-1)
return @re
end

select distinct 物料类别, dbo.fun(物料类别) from T

--result
物料类别
---------- -------------------------------
钢笔 0004 ,0005
铅笔 0001 ,0002
圆珠笔 0007 ,0008

(3 row(s) affected)