Sql 在access中运行更新查询时出现问题
我有一个关系access数据库,我想基于另一个表更新一个表。你可以在图中看到关系。SQL语句如下所示。当我尝试更新I face时,“您的查询不包括作为聚合函数一部分的指定表达式“TRX900” 但当我尝试在数据表视图模式下查看时,它是正常的。感谢您的支持Sql 在access中运行更新查询时出现问题,sql,ms-access,Sql,Ms Access,我有一个关系access数据库,我想基于另一个表更新一个表。你可以在图中看到关系。SQL语句如下所示。当我尝试更新I face时,“您的查询不包括作为聚合函数一部分的指定表达式“TRX900” 但当我尝试在数据表视图模式下查看时,它是正常的。感谢您的支持 Update ( ( Sites INNER JOIN Cells ON Sites.ID = Cells.SiteID ) INNER JOIN Cells_2G ON Cells.ID = Cells_2
Update
(
(
Sites INNER JOIN Cells ON Sites.ID = Cells.SiteID
) INNER JOIN Cells_2G ON Cells.ID = Cells_2G.[Cell ID]
) ,
ImportedTRX INNER JOIN ActiveStatus ON ImportedTRX.[Active Status] = ActiveStatus.Status
Set
Cells_2G.TRX900=Sum( IIF ( ImportedTRX.Frequency <=124 , 1,0 ) )
,
Cells_2G.TRX1800=Sum( IIF ( ImportedTRX.Frequency >=512 , 1,0 ) )
WHERE
(
ImportedTRX.[cell name]=[Sites].[SiteID] & [Cells].[Cell_Order]
AND
ActiveStatus.YesNo=True
)
;
单元格表示例:
-----------------------
| ID | SiteID |
-----------------------
| 1 | T4000X |
-----------------------
------------------------------------
| ID | SiteID | Cell_Order |
------------------------------------
| 1 | 1 | A |
| 2 | 1 | B |
| 3 | 1 | C |
------------------------------------
Cell_2G样本表:
------------------------------------------------------------
| ID | CellID | Expected TRX900 | Expected TRX1800 |
------------------------------------------------------------
| 1 | 1 | 1 | 2 |
| 2 | 2 | 2 | 1 |
| 3 | 3 | 2 | 3 |
------------------------------------------------------------
进口TRX表格样本
-------------------------
| Cell Name | Frequency |
-------------------------
| T4000XA | 800 |
| T4000XA | 801 |
| T4000XA | 22 |
| T4000XB | 4 |
| T4000XB | 33 |
| T4000XB | 860 |
| T4000XC | 20 |
| T4000XC | 21 |
| T4000XC | 840 |
| T4000XC | 841 |
| T4000XC | 842 |
-------------------------
解决此问题有两种方法:
SELECT
查询,只有要更新的表被删除
查询查询1:
SELECT
Sum( IIF ( ImportedTRX.Frequency <=124 , 1,0 ) ) As TRX900
,
Sum( IIF ( ImportedTRX.Frequency >=512 , 1,0 ) ) As TRX1800,
Cells.ID
FROM
(
Sites INNER JOIN Cells ON Sites.ID = Cells.SiteID
),
ImportedTRX INNER JOIN ActiveStatus ON ImportedTRX.[Active Status] = ActiveStatus.Status
WHERE
(
ImportedTRX.[cell name]=[Sites].[SiteID] & [Cells].[Cell_Order]
AND
ActiveStatus.YesNo=True
)
GROUP BY
Cells.ID
;
UPDATE Cells_2G
SET
Cells_2G.TRX900= DLookUp("TRX900", "Query1", "ID = " & [Cell ID]),
Cells_2G.TRX1800= DLookUp("TRX1800", "Query1", "ID = " & [Cell ID])
这会产生所需的结果,尽管您没有包括ActiveStatus
表,所以我不能在测试中包括它
不幸的是,该语句太复杂,我无法将其写入单个更新查询中,因此这种两步方法是我能想到的最好的非VBA解决方案。尝试了一些之后,我使用了以下代码,但速度仍然很慢
UPDATE
ImportedTRX,
(
Sites INNER JOIN Cells ON Sites.ID=Cells.SiteID
) INNER JOIN Cells_2G ON Cells.ID= cells_2G.[Cell ID]
SET
Cells_2G.TRX900 = DSUM("IIF(Frequency<=124,1,0)", "ImportedTRX", "[Cell Name]='"& Sites.SiteID & Cells.Cell_Order & "'")
,
Cells_2G.TRX1800 = DSUM("IIF(Frequency>=512,1,0)", "ImportedTRX", "[Cell Name]='"& Sites.SiteID & Cells.Cell_Order & "'")
WHERE
(
ImportedTRX.[Cell Name]=Sites.[SiteID] & Cells.[Cell_Order]
);
更新
进口TRX,
(
站点内部连接站点上的单元格。ID=Cells.SiteID
)单元格上的内部连接单元格。\u 2G。ID=单元格。\u 2G。[单元格ID]
设置
Cells_2G.TRX900=DSUM(“IIF(频率=512,1,0)”,“ImportedTRX”,“[Cell Name]=”,“&Sites.SiteID&Cells.Cell_顺序&“”)
哪里
(
ImportedTRX。[单元名称]=站点。[站点ID]&单元。[单元顺序]
);
您无法使此查询正常工作。您可以通过在底部添加GROUP by TRX900、TRX1800
来避免此问题,但随后会出现错误,因为您的记录集不可更新,这是主要问题。为了避免这种情况,您必须重写整个查询以使用域聚合而不是联接,并且如果没有样本数据和预期输出,我们无法为您这样做。谢谢Erik。我在下面的路径中添加了一个小示例:同时,我在“Cells_2G”表中添加了两个名为“Expected TRX900”和“Expected TRX1800”的列作为预期结果。谢谢你的帮助。我的建议是在“导入TRX”表的基础上更新“Cells_2G”表。我想计算每个对应单元格的频率。\u 2G记录抱歉,我没有从不可信的来源下载Access数据库。请参阅,了解如何在SO上共享表格。亲爱的Erik。我确实编辑了我的问题,并添加了示例表。非常感谢Erik,您的提示和支持,帮助了我很多。我将在VBA中使用sql。但是,您提到的解决方案需要在我的数据库中运行很多时间。经过一些尝试,我发现了一个运行更快的查询解决方案,我想与大家分享。但我不知道如何在评论中分享。我应该回答我的问题吗?如果它解决了你的问题,你可以分享它作为一个答案。如果你想问更多关于它的问题,你可以问一个新问题,如果你的问题没有实质性的改变,也可以把它编辑成你的问题。