日期:2014-05-18 浏览次数:20623 次
create table TB(产品编码 nvarchar(20),中文名称 nvarchar(20),拉手 varchar(10),数量 int)
insert into tb values('TV2160YSO'  , N'两门电视柜' ,'H001', 20)
insert into tb values('BT2160YSO'  , N'床头柜'     ,'H001', 10)
insert into tb values('BT2160YSO'  , N'床头柜'     ,'H002', 40)
insert into tb values('ARM22160YSO', N'两门大衣柜' ,'H002', 10)
insert into tb values('ARM22160YSO', N'两门大衣柜' ,'H004', 20)
insert into tb values('ARM22160YSO', N'两门大衣柜' ,'H003', 10)
insert into tb values('ARM22160YSO', N'两门大衣柜' ,'H005', 20)
insert into tb values('BC2160YSO'  , N'行李架'     ,'H004', 10)
go
create function dbo.f_str1(@产品编码 varchar(20),@中文名称 varchar(20)) returns varchar(50)
as
begin
  declare @str varchar(50)
  select @str = isnull(@str + ',' , '') + cast(拉手 as varchar) from tb where 产品编码 = @产品编码 and 中文名称 = @中文名称
  return @str
end
go
create function dbo.f_str2(@产品编码 varchar(20),@中文名称 varchar(20)) returns varchar(50)
as
begin
  declare @str varchar(50)
  select @str = isnull(@str + ',' , '') + cast(数量 as varchar) from tb where 产品编码 = @产品编码 and 中文名称 = @中文名称
  return @str
end
go
--调用函数
select 产品编码 ,中文名称, 
拉手 = dbo.f_str1(产品编码,中文名称) ,
数量 = dbo.f_str2(产品编码,中文名称)
from tb group by 产品编码,中文名称
drop function dbo.f_str1
drop function dbo.f_str2
drop table tb
/*
产品编码                 中文名称                 拉手                                                 数量                                                 
-------------------- -------------------- -------------------------------------------------- -------------------------------------------------- 
ARM22160YSO          两门大衣柜                H002,H004,H003,H005                                10,20,10,20
BC2160YSO            行李架                  H004                                               10
BT2160YSO            床头柜                  H001,H002                                          10,40
TV2160YSO            两门电视柜                H001                                               20
(所影响的行数为 4 行)
*/