我想创建一个同时显示年收入和费用的报告。因为我对sql太天真了,所以我一次只能做一个。但是,如果我想每月生成此报告,我发现显示我的报告需要花费大量时间。那么请你帮我把这2个sql结合起来?谢谢..
我现在的平均数是...
收入sql
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]) =" & current_year & "
group by month(showndate)) tvt on tvt.month = month(tbt.showndate)
where year([showndate]) =" & current_year & "
group by month(showndate), sum_vat_total
费用
SELECT Sum(tbl_expense.exp_amt) AS SumOfexp_amt,
Year([tbl_expense].[exp_inv_date]) AS yr,
Month([tbl_expense].[exp_inv_date]) AS mth
FROM tbl_expense
GROUP BY Year([tbl_expense].[exp_inv_date]), Month([tbl_expense].[exp_inv_date])
HAVING (((Year([tbl_expense].[exp_inv_date]))=" & current_year & "))
以下是我目前为实现收入而实施的代码&费用报告:
<table cellspacing="0" cellpadding="0" border="0" width="80%" class="border" align="center">
<tr bgcolor="#dddddd" >
<td width="10%" align="center" class="border"><font class="bold">Month (th)</font></td>
<td width="10%" align="center" class="border"><font class="bold">Year</font></td>
<td width="20%" class="border" align="center"><font class="bold">Total (Baht)</font></td>
<td width="20%" class="border" align="center"><font class="bold">Vat Total (Baht)</font></td>
<td width="20%" class="border" align="center"><font class="bold">Gross Total (Baht)</font></td>
<td width="20%" class="border" align="center"><font class="bold red">Expense (Baht)</font></td>
</tr>
<%
if rsBill.eof then
call displayNotFoundRecord
Else
Dim Cmonth, CLoop
Cmonth = 1
CLoop = 1
Do while Not rsBill.EOF
dim color
y = n mod 2
if y > 0 then
color = "EFF4FA"
else
color = "ffffff"
end if
%>
<tr bgcolor="#<%=color%>">
<td align="center"><%=rsBill.Fields.item("month")%></td>
<td align="center"><%=current_year%></td>
<%
Dim SumOfbill_total, SumOfVat_total, SumOfAll
SumOfbill_total = rsBill.Fields.item("bill_total")
SumOfVat_total = rsBill.Fields.item("vat_total")
SumOfAll = SumOfbill_total + SumOfVat_total
%>
<td align="right" style="padding-right:5%"><%=formatnumber(SumOfbill_total,2)%></td>
<td align="right" style="padding-right:5%"><%=formatnumber(SumOfVat_total,2)%></td>
<td align="right" style="padding-right:5%" class="blue"><%=formatnumber(SumOfAll,2)%></td>
<td align="right" style="padding-right:5%;" class="red">
<%
if rsExp.eof then
response.write "No matches."
Else
Do while Not rsExp.EOF
if rsExp.Fields.item("mth") = rsBill.Fields.item("month") then
%>
<%=formatnumber(rsExp.Fields.item("SumOfexp_amt"),2)%>
<%
end if
%>
<%
rsExp.movenext
Cmonth = Cmonth + 1
n = n + 1
%>
<%
Loop 'end rsExp Loop
End if 'end of rsExp
SumOfYear = SumOfAll + SumOfYear
rsExp.movefirst
%>
</td>
</tr> <!-- end of loop table -->
<%
rsBill.movenext
Loop
rsBill.movefirst
End if
%>
<tr bgcolor="#FFFFCC">
<td colspan="4" align="right">Gross Total </td>
<td align="right" style="padding-right:5%" class="green bold"><%=formatnumber(SumOfYear,2)%></td>
<td align="right" style="padding-right:5%" class="red bold"><%=formatnumber(rsSumExp.Fields.item("SumOfexp"),2)%></td>
</tr>
</table>
答案 0 :(得分:0)
UNION set operator是我过去使用过的。这可能会创建一个庞大的查询,可能会或可能不会。
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]) =" & current_year & "
group by month(showndate)) tvt on tvt.month = month(tbt.showndate)
where year([showndate]) =" & current_year & "
group by month(showndate), sum_vat_total
UNION ALL
SELECT Sum(tbl_expense.exp_amt) AS SumOfexp_amt,
Year([tbl_expense].[exp_inv_date]) AS yr,
Month([tbl_expense].[exp_inv_date]) AS mth
FROM tbl_expense
GROUP BY Year([tbl_expense].[exp_inv_date]), Month([tbl_expense].[exp_inv_date])
HAVING (((Year([tbl_expense].[exp_inv_date]))=" & current_year & "))
我可能建议的唯一其他方法是程序方法,将第一个查询的结果存储到数组中,然后将第二个查询的结果附加到同一个数组中(确保使用相同的表列),然后输出或使用数组?