sql数据库多表查询(sql数据库多表查询示例)
可以有两种处理方法,1、两表先合并,后求和
select日期,sum(数值)as数值from
(select日期,金额as数值fromA表
unionall
select日期,数量as数值fromB表)
groupby日期
2、先求和后合并,再求和
select日期,sum(数值)as数值from
(select日期,sum(金额)as数值fromA表groupby日期
unionall
select日期,sum(数量)as数值fromB表groupby日期)
groupby日期
对于“如果要实现总和的相乘、相除,或者相减得话,应该怎么写呢?”,你得提出明确需求,那后才能设计。
如果是相乘、相除,或者相减,得有条件,还像上面,用日期关联,A表-B表,A表求和:select日期,sum(金额)as数值fromA表groupby日期
B表求和:select日期,sum(数量)as数值fromB表groupby日期
在执行A表-B表时,由于用日期关联,则某一日期对应的记录可能会产生三种情况:A表B表都有;A表有B表无;A表无B表有。
1、需要先找出所有日期,select日期fromA表
union
select日期fromB表
2、对于A表中所有数据以上表中日期为依据构造所有相关日期数据,如果有日期数据,则为原数据,否则为0。
selecta.日期as日期,casewhenb.数值isNULLthenb.数值else0endas数值
from
(select日期fromA表
union
select日期fromB表)a
leftjoin
(select日期,sum(金额)as数值fromA表groupby日期)b
ona.日期=b.日期
3、同样对于B表也如此。
4、2表相减即得。
selecta3.日期as日期,a3.数值-b3.数值as数值
from
(
selecta1.日期as日期,casewhenb1.数值isNULLthenb1.数值else0endas数值
from
(select日期fromA表
union
select日期fromB表)a1
leftjoin
(select日期,sum(金额)as数值fromA表groupby日期)b1
ona1.日期=b1.日期
)a3,(
selecta2.日期as日期,casewhenb2.数值isNULLthenb2.数值else0endas数值
from
(select日期fromA表
union
select日期fromB表)a2
leftjoin
(select日期,sum(金额)as数值fromB表groupby日期)b2
ona2.日期=b2.日期
)b3
wherea3.日期=b3.日期
当然,以上只是一种方法,还有其他方法也可以实现,尽供参考。