日期:2014-05-18  浏览次数:20391 次

如何写这个更新语句?
数据表如下所示,要更新的列为第3列(规格列表),目的就是将相同“产品编码”的“规格”合并到“规格列表”

产品编码 规格 规格列表
40001848 15*60*4 15*60*4/18*50*4/20*50*4
40001848 18*50*4 15*60*4/18*50*4/20*50*4
40001848 20*50*4 15*60*4/18*50*4/20*50*4
40001857 100*40 100*40/120*40
40001857 120*40 100*40/120*40

备注:一个“产品编码”可能有1-10个规格,但规格不重复。


------解决方案--------------------
写个自定义函数,拼起来就行了
类似
create function dbo.f_get(@code varchar(800))
returns varchar(8000)
as
begin
declare @result varchar(8000)
set @result=''
select @result=@result+','+规格 from 表 where 产品编码=@code
return @result
end

------解决方案--------------------
SQL code
--sql2005
update tb set 规格列表=t.规格列表
from
(
select 产品编码,
规格列表=stuff((select '/'+规格 from tb where 产品编码=t.产品编码 for xml path('')),1,1,'')
from tb t group by 产品编码
) t
where tb.产品编码=t.产品编码
go

--sql2000
if object_id('F_Str') is not null 
    drop function F_Str 
go 
create function F_Str(@Col int) 
returns nvarchar(100) 
as 
begin 
    declare @S nvarchar(100) 
    select @S=isnull(@S+',','')+规格 from tb where 产品编码=@Col
    return @S 
end 
go 
update tb set 规格列表=dbo.F_Str(产品编码)
go