【问题标题】:How to Edit Field in Composed Query如何在组合查询中编辑字段
【发布时间】:2019-03-21 15:29:45
【问题描述】:

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

我有一张关于支付的表格: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     | 
+---------+-------------+

我收到以下查询 (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 中编辑税收时,我总是收到错误:无法更新记录集。我尝试将每个记录类型都设置为 dyn(全局更新),但它仍然不可编辑。

有人有办法解决这个问题吗?

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

【问题讨论】:

  • 将 Q1 的结果插入到临时表中,并将其与 Q2 连接起来,确实是一种可行的选择。特别是如果DSum 会影响性能。
  • 很好奇,你想在那个结果集中更新什么?为什么不更新源表?
  • 用户必须拥有所有报告数据才能更新 TaxesPaid 值(以避免一些输入错误)。仅在 tTaxesPaid 中允许输入值仍然是一种不友好的用户方法。

标签: sql ms-access


【解决方案1】:

无法编辑这些值,因为查询的一个组件(特别是您的 qryPay_groupByMonth)使用聚合。在 MS Access 中,任何在执行过程中使用聚合的查询返回的记录集都是不可更新的。

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

您也可以将聚合值输出到临时表(在先清除表内容后使用追加查询 [insert into TempTable select ... from ...];或者在删除表后使用生成表查询 [select ... into TempTable from ...]已经存在 [drop TempTable]);然后可以将此类临时表连接到您的未聚合查询,以便查询保持可更新。

【讨论】:

  • 感谢您的提示。我试过了,速度很慢,正常吗?
  • @ElenGlimois 是的,域聚合函数的评估速度很慢。我已经更新了我的答案以提供另一种选择。
  • 谢谢李。我会尝试看看性能是否足以满足我们的需求。
  • 我在第一种和第二种方法之间进行了测试:我在一个复杂的查询中赢得了 6 秒!!!非常感谢你
  • @ElenGlimois 很高兴听到这个消息!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多