Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Access SQL查询优化,添加分组依据时速度较慢_Sql_Ms Access_Group By_Query Optimization - Fatal编程技术网

Access SQL查询优化,添加分组依据时速度较慢

Access SQL查询优化,添加分组依据时速度较慢,sql,ms-access,group-by,query-optimization,Sql,Ms Access,Group By,Query Optimization,所以,我有两个问题。第一,我是否真的采取了正确的方法来提高效率?我正在尝试创建一个名为Type的新列,根据两个表的字段是否匹配,输出不同的名称。这是一个嵌套的IF语句。查询很容易在2-3秒钟内完成,但我希望按照ItemName和Type进行分组,因为有很多重复项。这样做之后,查询没有完成,超时,并在10分钟的尝试后声称过于复杂。我也尝试过使用DISTINCT和FIRST,但运气不太好。在总体方案中,我希望将此查询与其他查询相结合,并创建按类型分组的运行总和。因此,在这个查询中,我可以执行分组操作

所以,我有两个问题。第一,我是否真的采取了正确的方法来提高效率?我正在尝试创建一个名为Type的新列,根据两个表的字段是否匹配,输出不同的名称。这是一个嵌套的IF语句。查询很容易在2-3秒钟内完成,但我希望按照ItemName和Type进行分组,因为有很多重复项。这样做之后,查询没有完成,超时,并在10分钟的尝试后声称过于复杂。我也尝试过使用DISTINCT和FIRST,但运气不太好。在总体方案中,我希望将此查询与其他查询相结合,并创建按类型分组的运行总和。因此,在这个查询中,我可以执行分组操作以使最终查询正常工作,这一点很重要。以下是查询:

SELECT Inventory_All.ItemName, 

IIF(Inventory_All.[ItemName]=Products.[QB Assembly Name], "Assembly Part",
IIF(Inventory_All.[ItemName]=Products.[QB Service Part Name],"Service Part",
IIF(Inventory_All.[ItemName]=Components.[QB Component Name],Components.Type,"Other") )) AS Type

FROM 
(Inventory_All LEFT JOIN Products ON Inventory_All.ItemName=Products.[QB Assembly Name] OR Inventory_All.ItemName=Products.[QB Service Part Name]) LEFT JOIN Components ON Inventory_All.ItemName=Components.[QB Component Name];
我读到其他人也有类似的问题,我尝试了索引,但似乎没有帮助。似乎我需要重新创建这个查询,其中GROUPBY函数几乎不需要处理那么多。不过,我不确定这种形式的SQL和GROUPBY是如何工作的。关于简化查询以使GROUPBY(或类似函数)工作,有什么建议吗


谢谢你的帮助。

也许有以下几行:

SELECT Inventory_All.ItemName, Type
FROM (
   SELECT "Assembly Part" As TYPE 
   FROM Inventory_All 
   LEFT JOIN Products ON Inventory_All.ItemName=Products.[QB Assembly Name]
   UNION
   SELECT "Service Part" As TYPE 
   FROM Inventory_All 
   LEFT JOIN Products ON Inventory_All.ItemName=Products.[QB Service Part Name]
   UNION
   SELECT "Other" As TYPE 
   FROM Inventory_All.ItemName=Components.[QB Component Name]) As x

也许是这样的:

SELECT Inventory_All.ItemName, Type
FROM (
   SELECT "Assembly Part" As TYPE 
   FROM Inventory_All 
   LEFT JOIN Products ON Inventory_All.ItemName=Products.[QB Assembly Name]
   UNION
   SELECT "Service Part" As TYPE 
   FROM Inventory_All 
   LEFT JOIN Products ON Inventory_All.ItemName=Products.[QB Service Part Name]
   UNION
   SELECT "Other" As TYPE 
   FROM Inventory_All.ItemName=Components.[QB Component Name]) As x

我想你想重新构造你的查询。进行三个单独的连接,每个零件一个。然后,对每个零件类型按项进行计数——一列用于组装,一列用于服务,一列用于组件

您将获得一个结果集,其中包含每个类型的名称和出现次数。那你想怎么做就怎么做


我在移动设备上,因此无法键入SQL。

我想您需要重新构造查询。进行三个单独的连接,每个零件一个。然后,对每个零件类型按项进行计数——一列用于组装,一列用于服务,一列用于组件

您将获得一个结果集,其中包含每个类型的名称和出现次数。那你想怎么做就怎么做

我在移动设备上,因此无法键入SQL