表item
列serialno  clerkcode
   1001      1
   1001      1
   1002      2
   1003      1
表pay 
  serialno   amount  payflag
   1001       10      0
   1001       15      1
   1002       20      0
   1002       10      1
   1003       15      2
要求查询结果为
  clerkcode   amount  payflag
     1       10      0
     1       15      1
     2       20      0
     2       10      1
     1003    15      2
也就是结果中amount  payflag还是pay中的值(完全照搬pay的这2个字段.行数不能多),其实就是查询结果多一个clerkcode字段。这个字段用item的代替在item表里面serialno 和 clerkcode是一一对应的。

解决方案 »

  1.   

    select item.clerkcode as serialno,pay.amount,pay.payflag from item,pay where item.serialno = pay.serialno
    union all
    select * from pay where serialno no in (select serialno from item)
      

  2.   

    select pay.clerkcode,item.amount,item.payflag
    from pay left inner join item
    on pay.serialno=item.serialno
      

  3.   

    declare @A table(serialno int,clerkcode int)
    insert @a(serialno,clerkcode)
    select 1001,1 union
    select 1001,1 union
    select 1002,2 union
    select 1003,1declare @pay table(serialno int,amount int,payflag int)insert @pay (serialno,amount,payflag)
    select 1001,10,0 union
    select 1001,15,1 union
    select 1002,20,0 union 
    select 1002,10,1 union
    select 1003,15,2 select clerkcode,amount,payflag
    from @A a,@pay p
    where a.serialno=p.serialno
      

  4.   

    if object_id('pubs..item') is not null
       drop table item
    gocreate table item(serialno varchar(10),clerkcode varchar(10))
    insert into item(serialno,clerkcode) values('1001',      '1')
    insert into item(serialno,clerkcode) values('1001',      '1')
    insert into item(serialno,clerkcode) values('1002',      '2')
    insert into item(serialno,clerkcode) values('1003',      '1')
    goif object_id('pubs..pay') is not null
       drop table pay
    gocreate table pay(serialno varchar(10),amount int,payflag int)
    insert into pay(serialno,amount,payflag) values('1001',       10,      0)
    insert into pay(serialno,amount,payflag) values('1001',       15,      1)
    insert into pay(serialno,amount,payflag) values('1002',       20,      0)
    insert into pay(serialno,amount,payflag) values('1002',       10,      1)
    insert into pay(serialno,amount,payflag) values('1003',       15,      2)
    goselect t.clerkcode as serialno,pay.amount,pay.payflag from pay,
    (
      select distinct * from item
    )

    where t.serialno = pay.serialnodrop table pay
    drop table item/*
    serialno   amount      payflag     
    ---------- ----------- ----------- 
    1          10          0
    1          15          1
    2          20          0
    2          10          1
    1          15          2(所影响的行数为 5 行)
    */