2013-01-10 1 views
0

table1에서 모든 행을 가져와서 table1의 각 사람에 대해 table3에 총 열을 가져 오려고합니다. 하위 쿼리, 내부 조인 또는 일반 where 절에서 Where 절을 어디에서든지 사용하지 않으면이 작업을 수행 할 수 있습니다. 아래의 where 절을 사용하면 제공된 날짜 사이에 table2의 레코드가 있고 table1에있는 사람들 만 검증되었습니다.하나의 테이블에서 모든 행 가져 오기 where 절을 사용하여 두 번째 테이블의 열 합계

내가 원하는 것은 table1의 모든 행이지만, 제공된 날짜 사이에 있으며 검증 된 table2의 레코드 만 합산합니다.

단일 쿼리에서이 작업을 수행 할 수있는 방법이 있습니까?

SELECT table1.ID 
    , table1.LName 
    , table1.FName 
    , (Select SUM(table3.DollarValue) Where table2.Verified = 1) AS total 
FROM table3 
INNER JOIN table2  ON table3.IncentiveID = table2.IncentiveID 
RIGHT OUTER JOIN table1 ON table2.ID = table1.ID 
Where table2.date >= '1/1/2012' 
    AND table2.date <= '12/31/2012' 
    AND table2.Verified = 1 
Group By table1.ID, table1.LName, table1.FName, table2.Verified 
Order By table1.LName, table1.FName 

도움을 주셔서 감사합니다.

+0

는 그래서,'date' 열이 테이블의 느릅 나무에 속하는를? 그리고'table3'은 무엇을위한 것입니까? 또한, 당신은 당신이'table2'의 레코드를 합치기를 원하지만'table3'의 컬럼을 사용하고 있다고 말하면, 당신의 게시물을 명확히 할 수 있습니까? – Lamak

+0

@Lamak 더 명확하게하기 위해 내 게시물을 업데이트했습니다. Table3은 table2와 일대 다 관계가 있습니다. 여기서 table3은 합계하려는 값을 가졌지 만 table2는 table1의 사람들이 작업의 인스턴스 (날짜 및 확인 됨)를 보유합니다. – Addicted2HD

답변

1

설명에 따르면 다음과 같은 것을 원하는 것처럼 들립니다. 어떤는 WHERE 필터링 하위 쿼리에 table2table3 가입 및 sum()을 배치하고 table1에 그 결과를 조인

SELECT t1.ID, 
    t1.LName, 
    t1.FName, 
    IsNull(t.total, 0) as Total 
FROM table1 t1 
LEFT JOIN 
(
    SELECT t2.id, SUM(t3.DollarValue) as total 
    FROM table2 t2 
    INNER JOIN table3 t2 
     on t2.IncentiveID = t3.IncentiveID 
    WHERE t2.date >= '2012-01-01' 
     AND t2.date <= '2012-12-31' 
     AND t2.Verified = 1 
    GROUP BY t2.id 
) t 
    on t1.ID = t.ID 
Order By t1.LName, t1.FName; 
+0

+1, 우수. 질문에 대한 의견을 게시 한 다음 응답을 확인하는 것을 잊었습니다. – Lamak

+0

정말 고마워요! 이것은 앞으로도 많은 도움이 될 것입니다. 문제를 해결하고 계속 진행하기 위해 여러 가지 쿼리를 수행하여 이러한 유형의 상황을 항상 우연히 발견했습니다. – Addicted2HD

관련 문제