有两个表,a为销售总表,b为销售明细表,由票号进行关连
a表
票号                 此次应收   补差
a01c200904010001     100     10b表
票号                 序号    产品编号   数量  单价 金额
a01c200904010001    1     123001    1    50  50
a01c200904010001    2     123111    1    50  50select sum(金额),sum(补差) from ysb inner join ysa on ysa.票号=ysb.票号
 想得到如下结果
100 10
可补差会出现20,因为其它字段需要就得用from ysb inner join ysa 这种型式,请问如何搞定呢

解决方案 »

  1.   

    select 
        sum(b.金额),
        sum(a.补差) 
    from (select 票号,sum(金额) 金额 from ysb group by 票号) b  
      inner join ysa a
         on a.票号=b.票号
      

  2.   

    select sum(金额),sum(补差) from ysb left join ysa on ysa.票号=ysb.票号 
      

  3.   

    if object_id('ysa') is not null drop table ysa 
     go 
    create table ysa([票号] varchar(20),[此次应收] int,[补差] int)
    insert ysa select 'a01c200904010001',100,10
    go
    if object_id('ysb') is not null drop table ysb 
     go 
    create table ysb([票号] varchar(20),[序号] int,[产品编号] int,[数量] int,[单价] int,[金额] int)
    insert ysb select 'a01c200904010001',1,123001,1,50,50
    union all select 'a01c200904010001',2,123111,1,50,50
    goselect 
        sum(b.金额) 金额,
        sum(a.补差) 补差
    from (select 票号,sum(金额) 金额 from ysb group by 票号) b  
        inner join ysa a
           on a.票号=b.票号
    /*
    金额          补差
    ----------- -----------
    100         10(1 行受影响)
    */
      

  4.   


    select sum(金额),sum(补差) from a 
    inner join (select 票号,sum(金额) as 金额 from b group by 票号 ) t
    on a.票号=t.票号 
      

  5.   

    select  m.补差,n.金额 from  
    (select 票号,sum(补差) 补差 from a) m
    join 
    (select 票号,sum(金额) 金额from b) n
    on m.票号=n.票号
      

  6.   

    select  m.补差,n.金额 from  
    (select 票号,sum(补差) 补差 from a group by 票号) m 
    join 
    (select 票号,sum(金额) 金额 from b group by 票号) n 
    on m.票号=n.票号
      

  7.   

    create table #ysa([票号] varchar(20),[此次应收] int,[补差] int)
    insert #ysa select 'a01c200904010001',100,10
    gocreate table #ysb([票号] varchar(20),[序号] int,[产品编号] int,[数量] int,[单价] int,[金额] int)
    insert #ysb select 'a01c200904010001',1,123001,1,50,50
    union all select 'a01c200904010001',2,123111,1,50,50
    goselect t.[票号],t.[单价],a.[补差]
    from #ysa a
    inner join
    (
     select [票号],sum([单价]) [单价] from #ysb group by [票号]
    ) T
    on a.[票号]=t.[票号]票号                   单价          补差
    -------------------- ----------- -----------
    a01c200904010001     100         10(1 行受影响)
      

  8.   


    CREATE TABLE YSA( 票号 CHAR(20),此次应收 INT,补差 INT)
    INSERT YSA 
    SELECT 'a01c200904010001',    100 ,   10 CREATE TABLE YSB( 票号 CHAR(20),序号 INT,产品编号 CHAR(10),数量 INT,单价 INT,金额 INT)
    INSERT YSB
    SELECT 'a01c200904010001',    1  ,  '123001',    1  ,  50 , 50 UNION
    SELECT 'a01c200904010001',    2  ,  '123111',    1 ,   50 , 50 SELECT YSB.票号,SUM(金额)总金额,#T.补差 补差 FROM YSB INNER JOIN(SELECT 票号,SUM(补差) 补差 FROM YSA
    GROUP BY 票号)AS #TON #T. 票号=YSB.票号GROUP BY YSB.票号,补差