2012-08-03 3 views
1

그래서 두 가지 질문이 있습니다. 첫째, 효율성을 위해 올바른 접근 방식을 실제로 취하고 있는지 여부입니다. 두 개의 테이블 필드가 일치하는지에 따라 다른 이름을 뱉어 Type이라는 새 열을 만들려고합니다. 중첩 된 IF 문입니다. 쿼리는 2-3 초 만에 끝나지 만 많은 중복이 있기 때문에 ItemName과 Type을 GROUP BY로 입력하고 싶습니다. 그렇게하면 쿼리가 끝나지 않고 시간이 초과되고 10 분이 지나면 쿼리가 너무 복잡해집니다. 또한 DISTINCT와 FIRST를 사용하여 많은 노력을 기울이지 않았습니다. 사물의 거대한 계획에서이 쿼리를 다른 쿼리와 결합하여 유형별로 그룹화 된 누적 합계를 만드는 것이 좋습니다. 따라서이 쿼리에서 GROUP BY를 사용하여 최종 쿼리를 수행하는 것이 중요합니다. 다음은 쿼리입니다.SQL 쿼리 최적화에 액세스, 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 (또는 유사한 함수)가 작동하도록 쿼리를 단순화하는 데 도움이되는 팁은 무엇입니까?

도움 주셔서 감사합니다. 이 라인에

답변

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 
0

나는 당신이 당신의 쿼리를 재구성하려는 생각합니다. 3 개의 분리 된 조인을 각 파트마다 하나씩 수행하십시오. 그런 다음 각 부품 유형의 항목 수를 유지하십시오. 하나는 조립 용, 하나는 서비스 용, 다른 하나는 구성 요소 용입니다.

각 유형에 대한 이름과 출현 횟수가있는 결과 세트가 표시됩니다. 그런 다음 원하는 것을하십시오.

저는 모바일 장치에있어 SQL을 입력 할 수 없습니다.

관련 문제