我有一个实现SQL的Access项目,并且我一直致力于优化对帐过程。此过程使用将所有表链接在一起的凭证系统。 每个表格中的每条记录都有一个与金额相关的特定凭证ID。 代金券本身是唯一的,可以包含多个代金券号码,可以在下面看到。如何优化这个SQL查询在相关表中的总和?
Table: Rec_Vouchers
v_id v_num voucher
1 12341234 12341234
2 10101010 10101010;22222222
2 22222222 10101010;22222222
...
我有8个通过这些凭证ID链接的其他表。我试图将所有表格连接在一起,以显示具有该特定凭证ID的每张表格的区分凭证ID和凭证以及所有相应金额的总和。以下是查询和结果示例。我已经为此工作了一段时间了,现在开始让我头疼了。这个查询可以工作,但需要很长时间才能执行。
此外,在某些时候,我需要将所有这些值匹配在一起,以确定凭证是“匹配”,“不匹配”还是“匹配带有差异”。到目前为止,我只尝试在下面的代码中创建一个函数,该函数将返回字符串值“M”,“NM”或“MwD”以显示在每个凭证的列中。再次,这是有效的,但需要很长时间。我也试着让VBA用查询的返回记录集做这个肮脏的工作,这也需要很多时间,但不会像在我的sql查询中创建函数那样长。这是下一步,所以如果你可以帮助所有这些会很好,但我真的只需要优化我提供的查询。
我知道这是一个很好的包装你的头,所以让我知道你是否需要任何更多的信息。任何帮助,将不胜感激。谢谢!
select a.v_id, a.voucher,
(Select sum(b.amount) from rec_month_4349_test b where b.voucher = a.v_id) as GL,
(Select sum(c.payments) from rec_daily_balancing_test c where c.voucher = a.v_id) as DB,
(Select count(x.v_num) from rec_vouchers x where a.v_id = x.v_id and x.v_num not like 'ONL%') as GLcount,
(select count(c.batch_num) from rec_daily_balancing_test c where a.v_id = c.voucher) as DBcount,
(select sum(d.amount) from rec_ed_test d where a.v_id = d.voucher) as ED,
(select sum(e.batchtotal) from rec_eft_batches_new_test e where a.v_id = e.voucher) as EFT,
(select sum(f.batchtotal) from rec_check_batch_test f where a.v_id = f.voucher) as CHK,
(select sum(g.idxtotal) from rec_lockbox_test g where a.v_id = g.voucher) as LBX,
(select sum(h.amount) from rec_lcdl_test h where a.v_id = h.voucher) as LCDL,
((select sum(i.payment_amount) from rec_electronic_files_test i where a.v_id = i.voucher) + (select sum(j.amount) from rec_electronic_edits_test j where a.v_id = j.voucher)) as Elec
from rec_vouchers a
group by a.v_id, a.voucher
Sample Results:
v_id GL DB GLcount DBcount ED EFT CHK LBX LCDL Elec
6131 19204.00 19204.00 1 1 NULL NULL NULL NULL NULL NULL
6132 125330.00 14932.00 6 6 NULL NULL NULL NULL NULL 14932.00
6133 18245.00 NULL 2 0 NULL NULL NULL NULL NULL NULL
6175 98.93 98.93 1 1 NULL 98.93 NULL NULL NULL NULL
为什么这个标签为sql-server,如果一切都在MS Access? –
您要求优化访问还是SQL Server? –
一切都不在Access中。所有rec_ *表都是数据库中的SQL表。所有Access都会调用上面创建的视图将结果导出到Excel电子表格中。 –