有一张表,一共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公斤

解决方案 »

  1.   

    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公斤'GOCREATE  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  合并列                         
    ---- ---- ---- ------------------------------------
    0001 0002 0003 苹果/1/5公斤,橘子/2/6公斤
    0001 0002 0004 香蕉/3/10公斤,猕猴桃/3/11公斤(所影响的行数为 2 行)
    */
      

  2.   

    select [编号1],[编号2],[编号3],[合并列]=stuff((select ','+[名称]+'/'+rtrim([数量])+'/'+[重量] from tb t2 where t1.[编号1]=t2.[编号1] and t1.[编号2]=t2.[编号2] and t1.[编号3]=t2.[编号3] for xml path('')
    ),1,1,'') from tb t1 group by [编号1],[编号2],[编号3]
      

  3.   

    use xuanya
    if object_id('ben','u') is not null
    drop table ben
    create table ben(
    no1 int,
    no2 int,
    no3 int,
    name varchar(20),
    num int,
    zhong varchar(20))
    insert into ben 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
    select no1 as 编号1,no2 as 编号2,no3 as 编号3,left(c,len(c)-1) as 合并列 from(
    select no1,no2,no3,(select name+'/',cast(num as varchar(20))+'/',zhong+','
    from ben where no1=b.no1 and no2=b.no2 and no3=b.no3
    for xml path('')) as c
    from ben as b
    group by no1,no2,no3
    ) as a哥们试一下这个查询