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

解决方案 »

  1.   


    select [产品编码],[中文名称],
    stuff((select ','+[拉手] from tb1 where [产品编码]=t.[产品编码] and [中文名称]=t.[产品编码] for xml path('')),1,1,'') [拉手],
    stuff((select ','+ltrim([数量]) from tb1 where [产品编码]=t.[产品编码] and [中文名称]=t.[产品编码] for xml path('')),1,1,'') [数量]
    from tb1 t
    group by [产品编码],[中文名称];
      

  2.   

    /*
    标题:按某字段合并字符串之一(简单合并)
    作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
    时间:2008-11-06
    地点:广东深圳描述:将如下形式的数据按id字段合并value字段。
    id    value
    ----- ------
    1     aa
    1     bb
    2     aaa
    2     bbb
    2     ccc
    需要得到结果:
    id     value
    ------ -----------
    1      aa,bb
    2      aaa,bbb,ccc
    即:group by id, 求 value 的和(字符串相加)
    */
    --1、sql2000中只能用自定义的函数解决
    create table tb(id int, value varchar(10))
    insert into tb values(1, 'aa')
    insert into tb values(1, 'bb')
    insert into tb values(2, 'aaa')
    insert into tb values(2, 'bbb')
    insert into tb values(2, 'ccc')
    gocreate function dbo.f_str(@id varchar(10)) returns varchar(1000)
    as
    begin
      declare @str varchar(1000)
      select @str = isnull(@str + ',' , '') + cast(value as varchar) from tb where id = @id
      return @str
    end
    go--调用函数
    select id , value = dbo.f_str(id) from tb group by iddrop function dbo.f_str
    drop table tb
    --2、sql2005中的方法
    create table tb(id int, value varchar(10))
    insert into tb values(1, 'aa')
    insert into tb values(1, 'bb')
    insert into tb values(2, 'aaa')
    insert into tb values(2, 'bbb')
    insert into tb values(2, 'ccc')
    goselect id, [value] = stuff((select ',' + [value] from tb t where id = tb.id for xml path('')) , 1 , 1 , '')
    from tb
    group by iddrop table tb
    --3、使用游标合并数据
    create table tb(id int, value varchar(10))
    insert into tb values(1, 'aa')
    insert into tb values(1, 'bb')
    insert into tb values(2, 'aaa')
    insert into tb values(2, 'bbb')
    insert into tb values(2, 'ccc')
    go
    declare @t table(id int,value varchar(100))--定义结果集表变量
    --定义游标并进行合并处理
    declare my_cursor cursor local for
    select id , value from tb
    declare @id_old int , @id int , @value varchar(10) , @s varchar(100)
    open my_cursor
    fetch my_cursor into @id , @value
    select @id_old = @id , @s=''
    while @@FETCH_STATUS = 0
    begin
        if @id = @id_old
           select @s = @s + ',' + cast(@value as varchar)
        else
          begin
            insert @t values(@id_old , stuff(@s,1,1,''))
            select @s = ',' + cast(@value as varchar) , @id_old = @id
          end
        fetch my_cursor into @id , @value
    END
    insert @t values(@id_old , stuff(@s,1,1,''))
    close my_cursor
    deallocate my_cursorselect * from @t
    drop table tb
      

  3.   

    --sql 2000用函数实现.
    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_str1drop function dbo.f_str2drop table tb/*
    产品编码                 中文名称                 拉手                                                 数量                                                 
    -------------------- -------------------- -------------------------------------------------- -------------------------------------------------- 
    ARM22160YSO          两门大衣柜                H002,H004,H003,H005                                10,20,10,20
    BC2160YSO            行李架                  H004                                               10
    BT2160YSO            床头柜                  H001,H002                                          10,40
    TV2160YSO            两门电视柜                H001                                               20(所影响的行数为 4 行)*/
    --sql 2005
    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)
    goselect 产品编码, 中文名称,
    [拉手] = stuff((select ',' + [拉手] from tb t where 产品编码 = tb.产品编码 and 中文名称 = tb.中文名称 for xml path('')) , 1 , 1 , ''),
    [数量] = stuff((select ',' + ltrim([数量]) from tb t where 产品编码 = tb.产品编码 and 中文名称 = tb.中文名称 for xml path('')) , 1 , 1 , '')
    from tb
    group by 产品编码, 中文名称drop table tb/*
    产品编码                 中文名称                 拉手                                                                                                                                                                                                                                                               数量
    -------------------- -------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    ARM22160YSO          两门大衣柜                H002,H004,H003,H005                                                                                                                                                                                                                                              10,20,10,20
    BC2160YSO            行李架                  H004                                                                                                                                                                                                                                                             10
    BT2160YSO            床头柜                  H001,H002                                                                                                                                                                                                                                                        10,40
    TV2160YSO            两门电视柜                H001                                                                                                                                                                                                                                                             20(4 行受影响)*/
      

  4.   

    消息 170,级别 15,状态 1,第 2 行
    第 2 行: 'xml' 附近有语法错误。
    消息 156,级别 15,状态 1,第 3 行
    在关键字 'for' 附近有语法错误。
      

  5.   

    dawugui
     
    (爱新觉罗.毓华) 佩服
      

  6.   

    dawugui
     
    (爱新觉罗.毓华)  佩服