所以,我有两个问题。一个是,我是否真的采取了正确的效率方法?我正在尝试创建一个名为Type的新列,根据两个表的字段是否匹配来吐出不同的名称。这是一个嵌套的IF语句。查询很容易在2-3秒内完成,但我希望GROUP BY为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(或类似函数)工作的任何提示吗?
感谢您的帮助。
答案 0 :(得分: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
答案 1 :(得分:0)
我认为你想重组你的查询。做三个单独的连接,每个连接一个。然后,保持每个零件类型的项目计数 - 一个用于装配,一个用于服务,一个用于组件。
您将获得一个结果集,其中包含每种类型的名称和出现次数。然后用你做你想做的事。
我在移动设备上,因此无法输入SQL。