日期:2014-05-17  浏览次数:20390 次

求一个 SQL 语句, SQL2000 的
有一张表,一共6个字段,[编号1][编号2][编号3][名称],4列不会有重复的

[编号1]    [编号2]    [编号3]     [名称]   [数量]   [重量]
0001        0002        0003      苹果       1     5公斤
0001        0002        0003      橘子       2     6公斤
0001        0002        0004      香蕉       3     10公斤
0001        0002        0004      猕猴桃     3     11公斤


我想实现,按照[编号1][编号2][编号3]进行分组,合并[名称][数量][重量],得到结果:


[编号1]    [编号2]    [编号3]        [合并列]
0001        0002        0003      苹果/1/5公斤,橘子/2/6公斤
0001        0002        0004      香蕉/3/10公斤,猕猴桃/3/11公斤

------解决方案--------------------
CREATE TABLE Test1([编号1] CHAR(4),   [编号2] CHAR(4),   [编号3] CHAR(4),    [名称] varchar(20),  [数量] int,  [重量] varchar(20))
INSERT test1 SELECT '0001'        ,'0002'        ,'0003'      ,'苹果',       1     ,'5公斤'
UNION ALL SELECT '0001'        ,'0002'        ,'0003'      ,'橘子',       2     ,'6公斤'
UNION ALL SELECT '0001'        ,'0002'        ,'0004'      ,'香蕉',       3     ,'10公斤'
UNION ALL SELECT '0001'        ,'0002'        ,'0004'      ,'猕猴桃',     3     ,'11公斤'

GO

CREATE  FUNCTION fun_Test1(@b1 CHAR(4),@b2 CHAR(4),@b3 CHAR(4))
RETURNS VARCHAR(200)
AS 
BEGIN
DECLARE @sqlT VARCHAR(200)
SELECT @sqlT=ISNULL(@sqlT+',','')+[名称]+'/'+ltrim(数量)+'/'+重量
FROM  test1
WHERE 编号1=@b1 and 编号2=@b2 and 编号3= @b3
ORDER BY 编号1

RETURN @sqlT
END
GO
SELECT 编号1,编号2,编号3, dbo.fun_test1(编号1,编号2,编号3) 合并列 FROM test1 group by 编号1,编号2,编号3

--result
/*
编号1  编号2  编号3  合并列