1

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

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];

我阅读了其他有类似问题的人,并尝试建立索引,但似乎没有帮助。看来我需要重新创建这个查询,其中 GROUP BY 函数几乎不需要处理那么多。我不确定这种形式的 SQL 和 GROUP BY 的行为如何。关于简化查询以让 GROUP BY(或类似功能)工作的任何提示?

谢谢您的帮助。

4

2 回答 2

1

也许在这些方面有一些东西:

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
于 2012-08-03T20:55:46.130 回答
0

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

您将获得一个结果集,其中包含每种类型的名称和出现次数。然后用它做你想做的事。

我在移动设备上,所以无法键入 SQL。

于 2012-08-03T23:39:03.867 回答