Access 数据库中的两个表之间的连接不起作用
Join between two tables in Access db does not work
我有一个用于测试的 Access 数据库,其中包含两个表,tbvendite 和 tbpagamenti。在 tbvendite 中,我输入了与客户有关的每笔销售,指定日期、Idcliente、cliente、id 操作和操作以及金额。在 tbpagamenti 中,我写下了客户支付的所有款项,这些款项可能是按销售日期分组的金额总和。
条件是客户当天可以购买但不能付款,这样他就可以支付之前暂停的金额而不购买。
我想为客户提取一份报告(或一份长报告),但我考虑使用的查询并没有产生我希望的结果。
SELECT tbvendite.data, tbvendite.idcliente, tbvendite.cliente,
Sum(iif(tbvendite.importo is null,0,tbvendite.importo)) AS amount,
Nz(SS.importo,0) AS PAY
FROM tbvendite
INNER JOIN (SELECT tbpagamenti.idcliente,
Sum(IIf(tbpagamenti.importo Is Null,0,tbpagamenti.importo)) AS Pay
FROM tbpagamenti
GROUP BY tbpagamenti.idcliente) AS SS
ON tbvendite.idcliente = SS.idCliente
GROUP BY tbvendite.data, tbvendite.idcliente, tbvendite.cliente;
tbvendite
tbpagamenti
当前结果
我认为您需要将 Nz (SS.importo, 0) 替换为 SS.Pay "importo"不属于子查询 (SS)
此致
在访问中以可视方式执行此操作的一种方法是
- 创建一个 UNION 视图,它使用为 tables
创建的两个视图
- 使用所需的聚合创建第二个查询。
- 运行 第二次查询
所以步骤
- 使用联合将您的两个 table 合并为 1,并将其作为查询保存在名为“qryDailySalesPay”的数据库中。
- 按数据、idcliente、cliente 汇总信息。
qryDailySalesPay:
SELECT tbvendite.data
, tbvendite.idcliente
, tbvendite.cliente
, iif(tbvendite.importo is null,0,tbvendite.importo) AS Amount
, 0 AS PAY
FROM tbvendite
UNION ALL
SELECT tbpagamenti.data
, tbpagamenti.idcliente
, tbpagamenti.cliente
, 0 as amount
, IIf(tbpagamenti.importo Is Null,0,tbpagamenti.importo) AS Pay
FROM tbpagamenti
qryDailySalesPay总结:
SELECT data, ideliente, cliente, sum(amount) as SumAmount, sum(Pay) as SumPay
FROM qryDailySalesPay
GROUP BY data, idcliente, cliente;
使用派生的“DatasALL”的替代方法table。 - 笔记;您可以将其设为 qrySalesAmountDatas 并替换派生的 table.
- 获取所有日期
- 获取与这些日期匹配的所有销售额
- 获取与这些日期匹配的所有付款
- 确保客户在销售和付款之间匹配
- 总计。
.
SELECT tbvendite.data
, tbvendite.idcliente
, tbvendite.cliente
, Sum(iif(tbvendite.importo is null,0,tbvendite.importo)) AS SumAmount
, Sum(IIf(tbpagamenti.importo Is Null,0,tbpagamenti.importo)) AS SumPay
FROM (SELECT Distinct data FROM tbvendite
UNION
SELECT DISTINCT data from tbpagamenti) AS DatasAll
LEFT JOIN tbvendite
on DatasAll.data = tbvendite.data
LEFT JOIN tbpagamenti
on DatasAll.data = tbpagamenti.data
AND tbvendite.idcliente=tbpagamenti.cliente
GROUP BY tbvendite.data
, tbvendite.idcliente
, tbvendite.cliente
我有一个用于测试的 Access 数据库,其中包含两个表,tbvendite 和 tbpagamenti。在 tbvendite 中,我输入了与客户有关的每笔销售,指定日期、Idcliente、cliente、id 操作和操作以及金额。在 tbpagamenti 中,我写下了客户支付的所有款项,这些款项可能是按销售日期分组的金额总和。
条件是客户当天可以购买但不能付款,这样他就可以支付之前暂停的金额而不购买。 我想为客户提取一份报告(或一份长报告),但我考虑使用的查询并没有产生我希望的结果。
SELECT tbvendite.data, tbvendite.idcliente, tbvendite.cliente,
Sum(iif(tbvendite.importo is null,0,tbvendite.importo)) AS amount,
Nz(SS.importo,0) AS PAY
FROM tbvendite
INNER JOIN (SELECT tbpagamenti.idcliente,
Sum(IIf(tbpagamenti.importo Is Null,0,tbpagamenti.importo)) AS Pay
FROM tbpagamenti
GROUP BY tbpagamenti.idcliente) AS SS
ON tbvendite.idcliente = SS.idCliente
GROUP BY tbvendite.data, tbvendite.idcliente, tbvendite.cliente;
tbvendite
tbpagamenti
当前结果
我认为您需要将 Nz (SS.importo, 0) 替换为 SS.Pay "importo"不属于子查询 (SS)
此致
在访问中以可视方式执行此操作的一种方法是
- 创建一个 UNION 视图,它使用为 tables 创建的两个视图
- 使用所需的聚合创建第二个查询。
- 运行 第二次查询
所以步骤
- 使用联合将您的两个 table 合并为 1,并将其作为查询保存在名为“qryDailySalesPay”的数据库中。
- 按数据、idcliente、cliente 汇总信息。
qryDailySalesPay:
SELECT tbvendite.data
, tbvendite.idcliente
, tbvendite.cliente
, iif(tbvendite.importo is null,0,tbvendite.importo) AS Amount
, 0 AS PAY
FROM tbvendite
UNION ALL
SELECT tbpagamenti.data
, tbpagamenti.idcliente
, tbpagamenti.cliente
, 0 as amount
, IIf(tbpagamenti.importo Is Null,0,tbpagamenti.importo) AS Pay
FROM tbpagamenti
qryDailySalesPay总结:
SELECT data, ideliente, cliente, sum(amount) as SumAmount, sum(Pay) as SumPay
FROM qryDailySalesPay
GROUP BY data, idcliente, cliente;
使用派生的“DatasALL”的替代方法table。 - 笔记;您可以将其设为 qrySalesAmountDatas 并替换派生的 table.
- 获取所有日期
- 获取与这些日期匹配的所有销售额
- 获取与这些日期匹配的所有付款
- 确保客户在销售和付款之间匹配
- 总计。
.
SELECT tbvendite.data
, tbvendite.idcliente
, tbvendite.cliente
, Sum(iif(tbvendite.importo is null,0,tbvendite.importo)) AS SumAmount
, Sum(IIf(tbpagamenti.importo Is Null,0,tbpagamenti.importo)) AS SumPay
FROM (SELECT Distinct data FROM tbvendite
UNION
SELECT DISTINCT data from tbpagamenti) AS DatasAll
LEFT JOIN tbvendite
on DatasAll.data = tbvendite.data
LEFT JOIN tbpagamenti
on DatasAll.data = tbpagamenti.data
AND tbvendite.idcliente=tbpagamenti.cliente
GROUP BY tbvendite.data
, tbvendite.idcliente
, tbvendite.cliente