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

合并查询
从TB1的到TB2的查询怎样写?
TB1[b][/b]
产品编码 中文名称 拉手 数量
TV2160YSO 两门电视柜 H001 20
BT2160YSO 床头柜 H001 10
BT2160YSO 床头柜 H002 40
ARM22160YSO 两门大衣柜 H002 10
ARM22160YSO 两门大衣柜 H004 20
ARM22160YSO 两门大衣柜 H003 10
ARM22160YSO 两门大衣柜 H005 20
BC2160YSO 行李架 H004 10

TB2[b][/b]
产品编码 中文名称 拉手 数量
TV2160YSO 两门电视柜 H001 20
BT2160YSO 床头柜 H001,H002 10,40
ARM22160YSO 两门大衣柜 H002,H004,H003,H005 10,20,10,20
BC2160YSO 行李架 H004 10


------解决方案--------------------
--sql 2000用函数实现.
SQL code
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 行)

*/