1

table1 からすべての行を取得したいのですが、table1 の各人に対して table3 の列の合計を取得したいと考えています。クエリのどこにも where 句を使用しない場合 (サブセレクト、内部結合、または通常の where 句)、これを行うことができます。以下のように where 句を使用すると、指定された日付の間に table2 にレコードがあり、検証された table1 の人のみが検証されます。

私が欲しいのは 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

あなたの説明に基づいて、次のようなものが欲しいようです。table2and table3join andをフィルタリングを使用sum()してサブクエリに配置し、その結果を次のように結合します。WHEREtable1

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 に答える