我怎么能让我的sql同时显示2个表的总和?

时间:2013-12-01 09:26:20

标签: sql ms-access-2007

我试图显示每月的账单总额和增值税总额(客户支付增值税)和所有(bill_total +增值税)之和的结果。但是,我的sql命令在执行后没有显示任何内容。那么请你帮助我,因为我的sql知识非常有限。

我的表位于

之下

tbl_bill_total

bill_id | bill_total | cust_id | showndate 
  1     |   1000     |   12    |  12/10/13
  2     |   1200     |   13    |  1/11/13
  3     |   500      |   12    |  3/11/13

tbl_vat_bill_total

vat_id  |  vat_total |  if_paid| showndate | cust_id 
  1     |    400     |   false |  13/10/13 |  14
  2     |    500     |   true  |  14/11/13 |  12
  3     |    100     |   false |  15/11/13 |  11
  4     |    200     |   true  |  20/11/13 |  12

预期结果应该是这样的

bill_total  |  vat_total | Sum_of_all | month
  1000      |    0       |   1000     |  10
  1700      |    700     |   2400     |  11

非常感谢

抱歉,我已经改变了预期的结果......因为这是一份年度报告,所以结果应列出一年内的所有销售额。 *

以下是我失败的尝试......

SELECT 
    Sum(tbl_bill_total.bill_total) AS bill_totalOfSum, 
    Sum(tbl_vat_bill_total.vat_total) AS vat_totalOfSum, 
    tbl_vat_bill_total.if_paid, 
    Month([tbl_bill_total.showndate]) AS month1
FROM 
    tbl_bill_total 
    INNER JOIN 
    tbl_vat_bill_total 
        ON tbl_bill_total.cust_id = tbl_vat_bill_total.cust_id
GROUP BY 
    tbl_vat_bill_total.if_paid, 
    Month([tbl_bill_total.showndate])
HAVING (((tbl_vat_bill_total.if_paid)=True));

2 个答案:

答案 0 :(得分:2)

好的,我暂时没有使用Access,但我认为以下内容应该有效:

select 
    sum(tbt.bill_total) as bill_total_
    ,iif(sum_vat_total is null, 0, sum_vat_total) as vat_total_
    ,iif(sum_vat_total is null, 0, sum_vat_total) + sum(bill_total) as sum_of_all
    ,month(showndate) as month
from tbl_bill_total tbt
left join (
    select 
        sum(vat_total) as sum_vat_total
        ,month(showndate) as month
    from tbl_vat_bill_total
    where if_paid = true
        and year(showndate) = 2013
    group by 
        month(showndate)
    ) tvt
        on tvt.month = month(tbt.showndate) 
where year(showndate) = 2013
group by 
    month(showndate)
    ,sum_vat_total

当然,这假设您在tbl_bill_total每月至少有一条记录,因为这是month字段的来源。

如果您有几个月有tbl_vat_bill_total条记录但没有tbl_bill_total条记录(或两个表中都没有记录),则需要更复杂的解决方案 - 可能需要date table

答案 1 :(得分:0)

创建一个这样的查询,称之为q_bill_sum

Select Sum(bill_total) as total, 'Bill' as Total_Type, Month(showndate) as bill_Month
From tbl_bill_total
Where Year(showndate) = 2013
group by Total_Type, Bill_month
Union
Select Sum(vat_total), 'Vat' as Total_Type, Month(showndate) as bill_month
From tbl_vat_bill_total
Where Year(showndate) = 2013 and if_paid = true
group by Total_Type, Bill_month

你最终得到了

1000 Bill 10
1700 Bill 11
0    Vat  10
700  Vat  11

然后

Select b.Total, ifnull(v.total,0), b.bill_Month
From q_bill_sum b 
left join q_bill_sum v On v.Bill_month = b.Bill_month

应该很接近,但你从来没有回答我关于在一个月内没有账单的大桶的问题。

我认为无论如何,访问不是我的强项,但是当我必须做一个很多的查询时,我总是把它分解成一些,然后当它工作时我会尝试简化,如果它看起来很可怕.. 。