父表a:
编号子表b:
编号  货物名称  件数  毛重  体积
父表10条记录。子表35条记录。现在要求结果是父表的所有记录,且每条记录都要显示对应子表的字段。
常规是:select a.编号.b.货物名称,件数,毛重,体积 from a left join b on b.编号 = a.编号但这样出来的结果有35条记录。因为子表有35条记录。我现在要求出来的结果是父表的记录即10条记录。实现的方法就是把每个编号对应的子表内容分行合并在一起保存在一条记录中。
这个函数怎么写??
下图是需要的结果3条记录。:

解决方案 »

  1.   

    select   a.编号,b.货物名称,sum(件数),sum(毛重),sum(体积)    
    from   a   left   join   b   on   b.编号   =   a.编号 
    group by a.编号,b.货物名称
      

  2.   

    2楼理解错了。我1楼图的结果是这样的:记录只有3条,货物名称,件数,毛重,体积,并非汇总,而是编号对应子表的明细,并在一起放在一条记录中。其实这个结果中,字段 货物名称,件数,毛重,体积 已不再是之前的类型了,结果都是 VARCHAR 或TEXT 。
      

  3.   

    举个例子:create table T(ID int)
    insert T select 1
    insert T select 2
    insert T select 3go
    create table T2(ID int,num int)
    insert T2 select 1,2
    insert T2 select 1,3
    insert T2 select 2,4
    insert T2 select 2,5
    select 
    t.ID,
    num=isnull(rtrim(t2.num),''),
    row=identity(int,1,1)
    into #
    from
    t
    left join
    t2 on t.ID=t2.ID
    select
    [ID]=case when row=(select min(row) from # where ID=a.ID) then rtrim(ID) else '' end,
    num
    from 
    # aID           num          
    ------------ ------------ 
    1            2
                 3
    2            4
                 5
    3            (所影响的行数为 5 行)
      

  4.   

    楼主
    你说的那种应该是在页面上来实现的
    SQL中要把多个记录合并为一条可以,但想要把每个子记录都显示为一行比较困难完全应该是页面上控件来实现