【发布时间】:2021-01-28 05:53:52
【问题描述】:
这是我第一次在这个论坛上找不到我的问题的答案,所以我决定注册并发布它。
我在编辑查询中的字段时遇到问题。我有 2 个要从中提取数据的表,但我需要今年和去年(以季度为单位)第二个表中的 2 组数据。我需要能够编辑选定的列(即选择一个人)。
成员表(选择是/否字段,默认为否)
| ID | Name | Selected | Status |
| 1 | Bob | No | M |
| 2 | Sam | No | M |
StampDues 表
| ID | DuesYear | Q1_Date | Q2_Date | Q3_Date | Q4_Date |
| 1 | 2020 | 1/1/20 | 4/1/20 | 7/1/20 | 10/1/20 |
| 1 | 2021 | 1/2/21 | 2/1/21 | | |
| 2 | 2020 | 1/2/20 | 4/2/20 | 7/2/20 | 10/2/20 |
| 2 | 2021 | 1/2/21 | | | |
我正在查找当前年份和去年日期的汇总,但随后需要能够“选择”一个人。
|Selected|Name |Last_Q1|Last_Q2|Last_Q3|Last_Q4|This_Q1|This_Q2|This_Q3|This_Q4|
| # | Bob |1/1/20 |4/1/20 |7/1/20 |10/1/20|1/2/21 |2/1/21 | | |
| # | Sam |1/2/20 |4/2/20 |7/2/20 |10/2/20|1/2/21 | | | |
我最初尝试了 join 语句,但无法选择人员。我现在正在使用更简单的代码,但仍然无法选择一个人。
SELECT
Selected,
Name,
(SELECT Q1_Date FROM StampDues WHERE [Member ID] = Members.MemberID AND DuesYear = year(now)-1) AS [Last Q1],
(SELECT Q2_Date FROM StampDues WHERE [Member ID] = Members.MemberID AND DuesYear = year(now)-1) AS [Last Q2],
(SELECT Q3_Date FROM StampDues WHERE [Member ID] = Members.MemberID AND DuesYear = year(now)-1) AS [Last Q3],
(SELECT Q4_Date FROM StampDues WHERE [Member ID] = Members.MemberID AND DuesYear = year(now)-1) AS [Last Q4],
(SELECT Q1_Date FROM StampDues WHERE [Member ID] = Members.MemberID AND DuesYear = year(now)) AS [This Q1],
(SELECT Q2_Date FROM StampDues WHERE [Member ID] = Members.MemberID AND DuesYear = year(now)) AS [This Q2],
(SELECT Q3_Date FROM StampDues WHERE [Member ID] = Members.MemberID AND DuesYear = year(now)) AS [This Q3],
(SELECT Q4_Date FROM StampDues WHERE [Member ID] = Members.MemberID AND DuesYear = year(now)) AS [This Q4]
FROM Members
WHERE GetIsMemberStatus(Status) = True
ORDER BY Name;
GetIsMemberStatus 是我创建的一个自定义函数,它返回 True 或 False。这似乎不是问题,因为它正在正确过滤名称。
作为一个注释,我使用这个查询作为一个连续子表单的控制源。我可以让子表单与日期的大量 dlookup 字段一起正常工作,但这填充速度很慢。我更喜欢 SQL 查询,因为它们似乎填充得更快。
【问题讨论】:
-
保存计算数据通常是不必要的,并且存在数据不同步的风险。没有涉及聚合查询的更新。如果可以计算更新,应该可以在需要的时候计算。如果您真的必须保存,替代方案涉及域聚合函数和/或 VBA。
-
查询呈现不可更新且不符合 UPDATE 操作的其他原因。您在查询中有不在表结构中的字段名称。我假设 ID 字段实际上命名为 MemberID 和 Member ID。建议不要在字段名称中使用空格。
-
我被计算出来的语句弄糊涂了。从表中选择的值均未计算,它们都是实际值。我只需要同时看到它们,并且能够“选择”一个人。从那里,一些 VBA 代码循环遍历成员表,并进一步处理选定字段设置为“是”的成员。我也知道字段名称没有空格规则,我只是在制作该表之后才知道这一点,以及很多代码。
-
计算或连接表,关键是您的查询不可编辑,不能在 UPDATE 操作中使用。当需要在查询或报表中显示时,可以在查询中计算“选定”值。最新版本的查询显示计算字段。
-
@dms292 请检查答案,让我知道它是否有效。最美好的祝愿:)
标签: sql ms-access ms-access-2010 jet