这条怎么出来的?
0001 3          S DEF TEST03          200

解决方案 »

  1.   

    insert into table-b ord_nmb,ord_line_nmb,type,code,qty select * from table-a
    试试行吗
      

  2.   

    对了,select后面可以加任何条件
      

  3.   

    insert into table-b ord_nmb,ord_line_nmb,type,code,qty select * from table-a where 条件
      

  4.   

    to:邹大哥,是我写错了
    那条应该是
    0001 4          S DEF TEST03          200
      

  5.   

    --示例--测试数据
    create table A(ord_nmb varchar(10),ord_line_nmb int,type varchar(10),code varchar(10),qty int)
    insert A  select '0001',1,'S','ABC'   ,100
    union all select '0001',2,'C','TEST01',null
    union all select '0001',3,'C','TEST02',null
    union all select '0001',4,'S','DEF'   ,200
    union all select '0001',5,'C','TEST03',null
    union all select '0002',1,'S','GHI'   ,300
    union all select '0002',2,'C','TEST04',null
    union all select '0002',3,'S','JKL'   ,400
    go--创建一个处理的自定义函数
    create function f_str(
    @ord_nmb varchar(10),
    @ord_line_nmb int
    )returns varchar(8000)
    as
    begin
    declare @r varchar(8000)
    set @r=''
    select @r=@r+rtrim(code) from A
    where ord_nmb=@ord_nmb 
    and type='C'
    and ord_line_nmb>@ord_line_nmb
    and ord_line_nmb<=isnull((
    select min(ord_line_nmb) from A
    where ord_nmb=@ord_nmb 
    and type='S'
    and ord_line_nmb>@ord_line_nmb
    ),ord_line_nmb)
    return(@r)
    end
    go--调用函数实现处理
    select ord_nmb,ord_line_nmb,type,code
    ,description=dbo.f_str(ord_nmb,ord_line_nmb)
    ,qty
    from A where type='S'
    go--删除测试
    drop table A
    drop function f_str/*--测试结果ord_nmb    ord_line_nmb type       code       description   qty     
    ---------- ------------ ---------- ---------- ------------- --------
    0001       1            S          ABC        TEST01TEST02  100
    0001       4            S          DEF        TEST03        200
    0002       1            S          GHI        TEST04        300
    0002       3            S          JKL                      400(所影响的行数为 4 行)
    --*/
      

  6.   

    1.自定义函数只需要创建一次,以后使用就行了
    2.我只写了查询出结果,要插入B表,只需要在调用时改为:
    insert into B
    select ord_nmb,ord_line_nmb,type,code
    ,description=dbo.f_str(ord_nmb,ord_line_nmb)
    ,qty
    from A where type='S'
      

  7.   

    If  EXISTS(SELECT  *  FROM  SYSOBJECTS  WHERE  ID=OBJECT_ID(N'[DBO].[TABLEA]')   AND  OBJECTPROPERTY(ID,N'ISUSERTABLE' )=1 )
    DROP  TABLE  [DBO].[TABLEA]
    GO
    CREATE  TABLE  TABLEA(
          ord_nmb   varchar(4)  null,
          Ord_Line_Nmb    int null,
         Type   varchar(1) null,
          Code  Varchar(10) null,
          Qty   int  null)
    CREATE  TABLE  TABLEB(
          ord_nmb   varchar(4)  null,
          Ord_Line_Nmb    int null,
         Type   varchar(1) null,
          Code  Varchar(10) null,
          [Description]   Varchar(100)  null,
          Qty   int  null)
    INSERT INTO  TABLEA   VALUES('0001',1,'S','ABC',100)
    INSERT INTO  TABLEA   VALUES('0001',2,'C','TEST01',NULL)
    INSERT INTO  TABLEA   VALUES('0001',3,'C','TEST02',NULL)
    INSERT INTO  TABLEA   VALUES('0001',4,'S','DEF',200)
    INSERT INTO  TABLEA   VALUES('0001',5,'C','TEST03',NULL)
    INSERT INTO  TABLEA   VALUES('0002',1,'S','GHI',300)
    INSERT INTO  TABLEA   VALUES('0002',2,'C','TEST04',NULL)
    INSERT INTO  TABLEA   VALUES('0002',3,'S','JKL',400)
    Declare  @Des  varchar(100)
    Declare  @Ord_Nmb  Varchar(4)
    Declare  @Ord_Line_Nmb Int
    Declare  @Type  Varchar(10)
    Declare  @Code  Varchar(10)
    Declare  @Qty  Int 
    --------------------------------------------------------------------
    Declare  @Ord_Nmb1  Varchar(4)
    Declare  @Ord_Line_Nmb1 Int
    Declare  @Type1  Varchar(10)
    Declare  @Code1  Varchar(10)Declare  kk  Cursor  For  
      Select  Ord_nmb,ord_line_nmb,Type,Code,Qty  From  TABLEA
    open   kk
    fetch  next  from kk into  @Ord_nmb,@ord_line_nmb,@Type,@Code,@Qty
    while  @@fetch_status=0
    begin
      If  @Type='S'
      begin
              Insert  into  TABLEB
               SELECT   @Ord_nmb,@ord_line_nmb,@Type,@Code,'',@Qty
              Update   TABLEB   SET  [DEscription]=@Des 
              Where   Ord_nmb=@Ord_nmb1  and  Ord_Line_nmb=@Ord_Line_nmb1
                          and  Type=@Type1   and  Code=@Code1
                set   @Ord_nmb1=@Ord_nmb
               set   @ord_line_nmb1=@ord_line_nmb
               set   @Type1=@Type
                set  @Code1=@Code
              SET  @Des=''
      end
      set  @Des=@Des+@Code
      fetch  next  from kk into  @Ord_nmb,@ord_line_nmb,@Type,@Code,@Qty
    end
    close kk
    deallocate  kk
    Select  *  From  Tableb
    drop table TableA
    DROP TABLE TABLEB