select a.姓名,sum(b.数值) 充值和 ,sum(c.数值) 扣费和 ,
sum(isnull(b.数值,0))-sum(isnull(c.数值,0)) [差额(充值和-扣费和)]
from 用户表 a
join 扣费表 b on a.姓名=b.姓名
join 充值表 c on a.姓名=c.姓名
group by a.姓名
sum(isnull(b.数值,0))-sum(isnull(c.数值,0)) [差额(充值和-扣费和)]
from 用户表 a
join 扣费表 b on a.姓名=b.姓名
join 充值表 c on a.姓名=c.姓名
group by a.姓名
select a.姓名,sum(b.数值) 扣费和 ,sum(c.数值) 充值和 ,
sum(isnull(c.数值,0))-sum(isnull(b.数值,0)) [差额(充值和-扣费和)]
from 用户表 a
join 扣费表 b on a.姓名=b.姓名
join 充值表 c on a.姓名=c.姓名
group by a.姓名
from (
select 姓名,数值 as 充值,0 as 扣费 from 充值表
union all
select 姓名,0 as 充值,数值 as 扣费 from 扣费表
)a group by a.姓名
比如用户自己定义了 取如下的列:用户表.姓名,sum(充值表.数值) as 充值和,sum(扣费表.数值) as 扣费和,sum(充值表.数值)- sum(扣费表.数值) as 余额
我根据:扣费用/充值表/用户表的定义信息,可以找到连接字段,进而要自动生成一个SQL语句,因为用户定义了什么列我事先不知道.我可以动态生成的是这个SQL.
select a.姓名,sum(充值表.数值) as 充值和,sum(扣费表.数值) as 扣费和,sum(充值表.数值)- sum(扣费表.数值) as 余额
from 用户表 a left join 充值表 on a.姓名=充值表.姓名 left join 扣费表 on a.姓名=扣费表.姓名
可惜这条SQL会出来大量重复的数据.是错的,要是能把这个SQL改成正确的就好了.