有三个表:   
  userinfo(用户基本信息):
            postcode    
            username     
           addr                  
  procinfo(用户提供的产品记录)(同一用户可能有多条记录):                          
            username   用户名  
           product    产品
             pMoney     产品金额
  transinfo(支付记录)(同一用户可能有多条记录)):                   
        ID       流水号 
         username   用户名 
         ActMoney    支付金额   
 现要由三个表使用一句SQL查询得到金额/支付表
 用户名  地址 邮编 总金额(对产品金额求和)已支付金额(对支付金额求和)   
username    addr   postcode   totalmoney   payedmoney  

解决方案 »

  1.   

    select a.username,addr,postcode,totalmoney,payedmoney from userinfo a inner join (select username,totalmoney=sum(pmoney) from procinfo group by username) b on a.username=b.username innser join (select username,payedmoney=sum(actmoney) from transinfo group by username) c on a.username=c.username
      

  2.   

    select a.username,a.addr,a.postcode,totalmoney = sum(b.pMoney) , payedmoney = sum(ActMoney)
    from userinfo a,procinfo b,transinfo c
    where a.username = b.username and a.username = c.username
    group by a.username 
      

  3.   

    select a.username,a.addr,a.postcode,totalmoney = isnull(sum(b.pMoney),0) , payedmoney = isnull(sum(ActMoney),0)
    from userinfo a left join procinfo b on a.username = b.username
    left join transinfo c on a.username = c.username
    group by a.username 
      

  4.   


    --三表username完全匹配,用内连接
    select a.username,a.addr,a.postcode,totalmoney = sum(b.pMoney) , payedmoney = sum(ActMoney)
    from userinfo a,procinfo b,transinfo c
    where a.username = b.username and a.username = c.username
    group by a.username --三表username不匹配,用左连接.
    select a.username,a.addr,a.postcode,totalmoney = isnull(sum(b.pMoney),0) , payedmoney = isnull(sum(ActMoney),0)
    from userinfo a left join procinfo b on a.username = b.username
    left join transinfo c on a.username = c.username
    group by a.username 
      

  5.   

    谢谢kk19840210 ,谢谢dawugui ,不过后面的内连接不行,
    错误报告是
    服务器: 消息 8120,级别 16,状态 1,行 1
    列 'a.addr' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
    服务器: 消息 8120,级别 16,状态 1,行 1
    列 'a.postcode' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
      

  6.   

    --不好意思,应该是这样
    --三表username完全匹配,用内连接
    select a.username,a.addr,a.postcode,totalmoney = sum(b.pMoney) , payedmoney = sum(ActMoney)
    from userinfo a,procinfo b,transinfo c
    where a.username = b.username and a.username = c.username
    group by a.username,a.addr,a.postcode --三表username不匹配,用左连接.
    select a.username,a.addr,a.postcode,totalmoney = isnull(sum(b.pMoney),0) , payedmoney = isnull(sum(ActMoney),0)
    from userinfo a left join procinfo b on a.username = b.username
    left join transinfo c on a.username = c.username
    group by a.username,a.addr,a.postcode