读书人

归并查询

发布时间: 2012-06-29 15:48:46 作者: rapoo

合并查询
从TB1的到TB2的查询怎样写?
TB1[b][/b]
产品编码中文名称拉手数量
TV2160YSO两门电视柜H00120
BT2160YSO床头柜H00110
BT2160YSO床头柜H00240
ARM22160YSO两门大衣柜H00210
ARM22160YSO两门大衣柜H00420
ARM22160YSO两门大衣柜H00310
ARM22160YSO两门大衣柜H00520
BC2160YSO行李架H00410

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


[解决办法]
--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)gocreate function dbo.f_str1(@产品编码 varchar(20),@中文名称 varchar(20)) returns varchar(50)asbegin  declare @str varchar(50)  select @str = isnull(@str + ',' , '') + cast(拉手 as varchar) from tb where 产品编码 = @产品编码 and 中文名称 = @中文名称  return @strendgocreate function dbo.f_str2(@产品编码 varchar(20),@中文名称 varchar(20)) returns varchar(50)asbegin  declare @str varchar(50)  select @str = isnull(@str + ',' , '') + cast(数量 as varchar) from tb where 产品编码 = @产品编码 and 中文名称 = @中文名称  return @strendgo--调用函数select 产品编码 ,中文名称, 拉手 = dbo.f_str1(产品编码,中文名称) ,数量 = dbo.f_str2(产品编码,中文名称)from tb group by 产品编码,中文名称drop function dbo.f_str1drop function dbo.f_str2drop table tb/*产品编码                 中文名称                 拉手                                                 数量                                                 -------------------- -------------------- -------------------------------------------------- -------------------------------------------------- ARM22160YSO          两门大衣柜                H002,H004,H003,H005                                10,20,10,20BC2160YSO            行李架                  H004                                               10BT2160YSO            床头柜                  H001,H002                                          10,40TV2160YSO            两门电视柜                H001                                               20(所影响的行数为 4 行)*/ 

读书人网 >SQL Server

热点推荐