1

我想从 table1 中获取所有行,并且我想为 table1 中的每个人获取 table3 中的总共一列。如果我不在查询中的任何地方使用 where 子句(在子选择、内部连接或常规 where 子句中),我就可以做到这一点。如果我使用如下所示的 where 子句,则只有 table1 中的人在提供的日期之间在 table2 中有记录并且已经过验证。

我想要的是 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

预先感谢您的任何帮助!

4

1 回答 1

3

根据您的描述,听起来您想要以下内容。哪个将您的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;
于 2013-01-10T17:49:18.997 回答