2013-01-10 33 views
0

我想從table1獲取所有行,並且我想要爲table1中的每個人獲取table3中的一列總數。我能夠做到這一點,如果我不在我的查詢中的任何地方使用where子句(在子選擇,內部聯接或常規的where子句中)。如果我使用下面的where子句,那麼只有table1中的人員在提供的日期和已驗證的table2之間有記錄。從一個表中獲取所有行,使用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

根據你的描述,這聽起來像你想要的東西如下。哪些地方你table2table3加入和sum()WHERE過濾子查詢,然後加入該結果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

相關問題