我有一个实现 SQL 的 Access 项目,并且我一直致力于优化协调过程。此过程使用将所有表格链接在一起的凭证系统。每个表中的每条记录都有一个与金额相关联的特定凭证 ID。优惠券本身是唯一的,可以包含多个优惠券编号,如下所示。
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