我试图显示每月的账单总额和增值税总额(客户支付增值税)和所有(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));
答案 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
应该很接近,但你从来没有回答我关于在一个月内没有账单的大桶的问题。
我认为无论如何,访问不是我的强项,但是当我必须做一个很多的查询时,我总是把它分解成一些,然后当它工作时我会尝试简化,如果它看起来很可怕.. 。