tb1 
-------------------------------------------- 
ITEMNO  ITEMCODE  EX   ITEMNAME    MEMO 
1        D        DX    DDDD        DDDD 
2        C        CX    CCCC        CCCC 
3        B        BX    BBBB        BBBB 
4        E        EX    EEEE        EEEE 
....... 
      tb2 
-------------------------------------------- 
ITEMCODE   EX      EX_Name   EX_MEMO    
E          E1      E11111    e111111
D          D1      D11111    D11111
C          C1      C11111    C11111
C          C2      C22222    C22222
E          E1      E11111    E11111
要求结果: 
-------------------------- 
ITEMNO  ITEMCODE    EX  ITEMNAME    MEMO 
1        D          DX  DDDD        DDDD 
                    D1  D111        D111
2        C          CX  CCCC        CCCC 
                    C1  C111        C111
                    C2  C222        C222
3        B          BX  BBBB        BBBB 
4        E          EX  EEEE        EEEE 
                    E1  E111        E111
....... 
要求:ITEMNO为序号,要求按以前的排序,不得改变,请问这个SQL应该如何写呢?

解决方案 »

  1.   

    tb1 
    -------------------------------------------- 
    ITEMNO  ITEMCODE  EX  ITEMNAME    MEMO 
    1        D        DX    DDDD        DDDD 
    2        C        CX    CCCC        CCCC 
    3        B        BX    BBBB        BBBB 
    4        E        EX    EEEE        EEEE 
    ....... 
          tb2 
    -------------------------------------------- 
    ITEMCODE  EX      EX_Name  EX_MEMO    
    E          E1      E11111    e111111 
    D          D1      D11111    D11111 
    C          C1      C11111    C11111 
    C          C2      C22222    C22222 
    E          E1      E11111    E11111 
    要求结果: 
    -------------------------- 
    ITEMNO  ITEMCODE    EX  ITEMNAME    MEMO 
    1        D          DX  DDDD        DDDD 
                        D1  D111        D111 
    2        C          CX  CCCC        CCCC 
                        C1  C111        C111 
                        C2  C222        C222 
    3        B          BX  BBBB        BBBB 
    4        E          EX  EEEE        EEEE 
                        E1  E111        E111 
      

  2.   

    ---测试数据---
    if object_id('[tb1]') is not null drop table [tb1]
    go
    create table [tb1]([ITEMNO] int,[ITEMCODE] varchar(1),[EX] varchar(2),[ITEMNAME] varchar(4),[MEMO] varchar(4))
    insert [tb1]
    select 1,'D','DX','DDDD','DDDD' union all
    select 2,'C','CX','CCCC','CCCC' union all
    select 3,'B','BX','BBBB','BBBB' union all
    select 4,'E','EX','EEEE','EEEE'
    if object_id('[tb2]') is not null drop table [tb2]
    go
    create table [tb2]([ITEMCODE] varchar(1),[EX] varchar(2),[EX_Name] varchar(6),[EX_MEMO] varchar(7))
    insert [tb2]
    select 'E','E1','E11111','e111111' union all
    select 'D','D1','D11111','D11111' union all
    select 'C','C1','C11111','C11111' union all
    select 'C','C2','C22222','C22222' union all
    select 'E','E1','E11111','E11111'
     
    ---查询---
    select ITEMNO,ITEMCODE,EX,ITEMNAME,MEMO
    from(
    select 
      itemno as px,
      case when ex like '%X' then ltrim(itemno) else '' end as ITEMNO,
      case when ex like '%X' then ITEMCODE else '' end as ITEMCODE,
      EX,
      ITEMNAME,
      MEMO
    from
    (
      select * from tb1 union all
      select tb1.itemno,tb2.* from tb2 left join tb1 on tb1.itemcode=tb2.itemcode
    ) t
    ) tt
    order by px,case when ex like '%X' then 1 else 2 end
    ---结果---
    ITEMNO       ITEMCODE EX   ITEMNAME MEMO    
    ------------ -------- ---- -------- ------- 
    1            D        DX   DDDD     DDDD
                          D1   D11111   D11111
    2            C        CX   CCCC     CCCC
                          C1   C11111   C11111
                          C2   C22222   C22222
    3            B        BX   BBBB     BBBB
    4            E        EX   EEEE     EEEE
                          E1   E11111   e111111
                          E1   E11111   E11111(所影响的行数为 9 行)
      

  3.   

    重新排一下,不知道好不好点tb1 
    -------------------------------------------- 
    ITEMNO  ITEMCODE      EX             ITEMNAME        MEMO 
    1                 D                DX             DDDD                DDDD 
    2                 C                CX             CCCC                  CCCC 
    3                 B                BX              BBBB                   BBBB 
    4                 E                EX               EEEE                   EEEE 
    ....... 
          tb2 
    -------------------------------------------- 
    ITEMCODE        EX         EX_Name        EX_MEMO    
    E                       E1         E11111           e111111 
    D                      D1        D11111           D11111 
    C                      C1         C11111          C11111 
    C                      C2         C22222          C22222 
    E                      E1          E11111           E11111 
    要求结果: 
    -------------------------- 
    ITEMNO      ITEMCODE         EX          ITEMNAME        MEMO 
    1                   D                      DX          DDDD               DDDD 
                                                 D1           D111                D111 
    2                   C                      CX           CCCC                CCCC 
                                                 C1           C111                 C111 
                                                 C2           C222                  C222 
    3                   B                      BX           BBBB                   BBBB 
    4                   E                      EX            EEEE                    EEEE 
                                                 E1            E111                   E111 
    ....... 
      

  4.   

    use Tempdb
    go
    --> --> 
     
    if not object_id('tb1') is null
    drop table tb1
    Go
    Create table tb1([ITEMNO] int,[ITEMCODE] nvarchar(1),[EX] nvarchar(2),[ITEMNAME] nvarchar(4),[MEMO] nvarchar(4))
    Insert tb1
    select 1,N'D',N'DX',N'DDDD',N'DDDD' union all
    select 2,N'C',N'CX',N'CCCC',N'CCCC' union all
    select 3,N'B',N'BX',N'BBBB',N'BBBB' union all
    select 4,N'E',N'EX',N'EEEE',N'EEEE'
    Go--> --> 
     
    if not object_id('tb2') is null
    drop table tb2
    Go
    Create table tb2([ITEMCODE] nvarchar(1),[EX] nvarchar(2),[EX_Name] nvarchar(6),[EX_MEMO] nvarchar(7))
    Insert tb2
    select N'E',N'E1',N'E11111',N'e111111' union all
    select N'D',N'D1',N'D11111',N'D11111' union all
    select N'C',N'C1',N'C11111',N'C11111' union all
    select N'C',N'C2',N'C22222',N'C22222' union all
    select N'E',N'E1',N'E11111',N'E11111'
    Go;with C
    as
    (
    select 
    tb1.ITEMNO,tb1.ITEMCODE,tb2.EX,tb1.ITEMNAME,tb1.MEMO ,row=row_number()over(partition by tb1.[ITEMNO] order by tb1.[ITEMNO],tb2.[ITEMCODE])
    from tb1 
    inner join tb2 on tb1.[ITEMCODE]=tb2.[ITEMCODE]
    )
    select 
    ITEMNO=case when row=1 then rtrim(ITEMNO) else '' end,ITEMCODE=case when row=1 then ITEMCODE else '' end,EX,ITEMNAME,MEMO 
    from 
    c
    order by c.ITEMNO,row
      

  5.   

    create table [tb1]([ITEMNO] varchar(10) , [ITEMCODE] varchar(1),[EX] varchar(2),[ITEMNAME] varchar(4),[MEMO] varchar(4))
    insert [tb1]
    select 1,'D','DX','DDDD','DDDD' union all
    select 2,'C','CX','CCCC','CCCC' union all
    select 3,'B','BX','BBBB','BBBB' union all
    select 4,'E','EX','EEEE','EEEE'
    create table [tb2]([ITEMCODE] varchar(1),[EX] varchar(2),[EX_Name] varchar(6),[EX_MEMO] varchar(7))
    insert [tb2]
    select 'E','E1','E11111','e111111' union all
    select 'D','D1','D11111','D11111' union all
    select 'C','C1','C11111','C11111' union all
    select 'C','C2','C22222','C22222' union all
    select 'E','E1','E11111','E11111'select itemno,itemcode,ex,itemname,memo from
    (
    select *  , px1=ITEMNO,px2 = ITEMCODE from tb1
    union all
    select itemno = '' , itemcode = '',tb2.ex , EX_Name = left(EX_Name,1) + REPLICATE(right(EX_Name,1),3) , EX_MEMO = left(EX_Name,1) + REPLICATE(right(EX_Name,1),3)  , px1 = tb1.ITEMNO , px2 = tb2.ITEMCODE from tb2 , tb1 where tb2.ITEMCODE = tb1.ITEMCODE
    ) t
    order by px1 , itemcode descdrop table tb1 , tb2/*
    itemno     itemcode ex   itemname memo     
    ---------- -------- ---- -------- -------- 
    1          D        DX   DDDD     DDDD
                        D1   D111     D111
    2          C        CX   CCCC     CCCC
                        C1   C111     C111
                        C2   C222     C222
    3          B        BX   BBBB     BBBB
    4          E        EX   EEEE     EEEE
                        E1   E111     E111
                        E1   E111     E111(所影响的行数为 9 行)*/
      

  6.   

    --你的E1有两个,如果要去重.create table [tb1]([ITEMNO] varchar(10) , [ITEMCODE] varchar(1),[EX] varchar(2),[ITEMNAME] varchar(4),[MEMO] varchar(4))
    insert [tb1]
    select 1,'D','DX','DDDD','DDDD' union all
    select 2,'C','CX','CCCC','CCCC' union all
    select 3,'B','BX','BBBB','BBBB' union all
    select 4,'E','EX','EEEE','EEEE'
    create table [tb2]([ITEMCODE] varchar(1),[EX] varchar(2),[EX_Name] varchar(6),[EX_MEMO] varchar(7))
    insert [tb2]
    select 'E','E1','E11111','e111111' union all
    select 'D','D1','D11111','D11111' union all
    select 'C','C1','C11111','C11111' union all
    select 'C','C2','C22222','C22222' union all
    select 'E','E1','E11111','E11111'select itemno,itemcode,ex,itemname,memo from
    (
    select *  , px1=ITEMNO,px2 = ITEMCODE from tb1
    union all
    select distinct itemno = '' , itemcode = '',tb2.ex , EX_Name = left(EX_Name,1) + REPLICATE(right(EX_Name,1),3) , EX_MEMO = left(EX_Name,1) + REPLICATE(right(EX_Name,1),3)  , px1 = tb1.ITEMNO , px2 = tb2.ITEMCODE from tb2 , tb1 where tb2.ITEMCODE = tb1.ITEMCODE
    ) t
    order by px1 , itemcode descdrop table tb1 , tb2/*
    itemno     itemcode ex   itemname memo     
    ---------- -------- ---- -------- -------- 
    1          D        DX   DDDD     DDDD
                        D1   D111     D111
    2          C        CX   CCCC     CCCC
                        C1   C111     C111
                        C2   C222     C222
    3          B        BX   BBBB     BBBB
    4          E        EX   EEEE     EEEE
                        E1   E111     E111(所影响的行数为 8 行)
    */
      

  7.   

    本帖最后由 roy_88 于 2009-03-18 11:26:42 编辑
      

  8.   


    select ITEMNO, ITEMCODE, EX, ITEMNAME, MEMO  from 
    (select ITEMNO, ITEMCODE, EX, ITEMNAME, MEMO, ItemId =ITEMNO, Item_order=1 from tb1 union (select ITEMNO='', ITEMCODE='', b.EX, b.EX_Name as ITEMNAME, b.EX_MEMO as MEMO, ItemId=a.ITEMNO, Item_order=2 from tb1 a left join tb2 on a.ITEMCODE=b.ITEMCODE)) a order by ItemId, Item_order
      

  9.   

    select ITEMNO, ITEMCODE, EX, ITEMNAME, MEMO  from 
    (select ITEMNO, ITEMCODE, EX, ITEMNAME, MEMO, ItemId =ITEMNO, Item_order=1 from tb1 
    union all
    select ITEMNO='', ITEMCODE='', b.EX, left(b.EX_Name,4) as ITEMNAME, left(b.EX_MEMO,4) as MEMO, ItemId=a.ITEMNO, Item_order=2 from tb1 a left join tb2 b on a.ITEMCODE=b.ITEMCODE
    ) a order by ItemId, Item_order
      

  10.   

    select ITEMNO,ITEMCODE,EX,ITEMNAME,MEMO
    from(
    select 
      itemno as px,
      case when ex like '%X' then ltrim(itemno) else '' end as ITEMNO,
      case when ex like '%X' then ITEMCODE else '' end as ITEMCODE,
      EX,
      ITEMNAME,
      MEMO
    from
    (
      select * from tb1 union all
      select tb1.itemno,tb2.* from tb2 left join tb1 on tb1.itemcode=tb2.itemcode
    ) t
    ) tt
    order by px,case when ex like '%X' then 1 else 2 end