如何在组合查询中编辑字段

时间:2019-03-21 15:29:46

标签: sql ms-access

是否可以在组查询中编辑一个字段

我有一张关于薪水的表:tPay

+-------------+--------------+---------------+---------------+
| idPay       | PayDate      | Pay           | Taxes         |
+-------------+--------------+---------------+---------------+
| 1           | 2018-01-12   | 1000,01       | 50,01         |
| 2           | 2018-01-26   | 1500,01       | 75,01         |
| 3           | 2018-02-04   | 1200,20       | 65,14         |
+-------------+--------------+---------------+---------------+

我按月查询分组:qryPay_groupByMonth(QRY#01)

SELECT DateSerial(Year([PayDate]),Month([PayDate]),1) AS Month, 
       Sum(tPay.Pay) AS PayOfMonth, 
       Sum(tPaie.Taxes) AS TaxesOfMonth
FROM tPay
GROUP BY DateSerial(Year([DateFinPeriode]),Month([DateFinPeriode]),1);

+-------------+--------------+---------------+
| Month       | PayOfMonth   | TaxesofMonth  | 
+-------------+--------------+---------------+
| 2018-01     | 2500.02      | 125.02        | 
| 2018-02     | 1200.20      | 64.14         | 
+-------------+--------------+---------------+

我创建如下的tTaxesPaid表以与上一个查询联接

+---------+-------------+
| Month   | TaxesPaid   |
+---------+-------------+
| 2018-01 |  125.02     | 
| 2018-02 |   62.04     | 
+---------+-------------+

我得到了Followign查询(QRY#02),其中TaxesPaid必须是一个可编辑的字段,而TaxesDiif必须是一个计算字段(应交税款和已付税款之间的差)。

SELECT  tTaxesPaid.Month,  
    tTaxesPaid.TaxesPaid, 
    qryPay_groupByMonth.TaxesOfMonth.TaxesOfMonth, 
    Round([TaxesPaid]-[TaxesOfMonth],2) AS TaxesDiff
FROM tTaxesPaid LEFT JOIN qryPay_groupByMonth ON tTaxesPaid.Month = qryPay_groupByMonth.Month;

+---------+-----------+------------+----------------------+-----------------+
| Month   | Pay       | Taxes      | TaxesPaid (editable) |TaxesDiff (calc) |
+---------+-----------+------------+----------------------+-----------------+
| 2018-01 | 2500.02   | 125.02     |  125.02              |                 |
| 2018-02 | 1200.20   | 64.14      |  62.04               | 2.10            |
+---------+-----------+------------+----------------------+-----------------+

当我尝试在QRY#02中编辑Taxs时总是出现错误:无法更新记录集。我尝试将每种记录类型都设为dyn(全局更新),但仍无法编辑。

有人有解决这个问题的想法吗?

我是否需要在临时表中复制QRY#01的结果才能在单个表报告中显示每个字段并能够编辑已付税款?

1 个答案:

答案 0 :(得分:0)

由于查询的一部分(特别是qryPay_groupByMonth)使用汇总,因此无法编辑值。在MS Access中,任何在执行过程中使用聚合的查询返回的记录集都是不可更新的。

您可以通过使用域聚合函数(例如DSum)来计算每月总计,因为这是在查询执行之外进行评估的,这意味着查询保持可更新。

您也可以将汇总值输出到临时表(先清除表的内容后使用追加查询[insert into TempTable select ... from ...],或删除后的生成表查询[select ... into TempTable from ...]该表(如果已存在[drop TempTable]));然后可以将这种临时表加入您的未聚合查询中,以使查询保持可更新状态。