SQL 查询对来自 3 个不同表的数据求和

SQL Query to SUM data from 3 different tables

我有 3 个 SQL Server 2005 table,一个 order table,quote table 和 invoice table,结构如下:

SO table

Rep Code SO Amount SO Date
----------------------------
1         100     1/2/2015
2          50     2/15/2015
3          20     2/20/2015
2          50     2/20/2015
1          85     2/20/2015

SQ table

Rep Code SQ Amount SQ Date
---------------------------
1        50        2/2/2015
2        14        2/18/2015
3        67        2/19/2015
1        96        2/20/2015
2        54        2/20/2015

INV table

Rep Code INV Amount INV Date
-----------------------------
1         654      2/2/2015
2         312      2/18/2015
3          54      2/19/2015
1           6      2/20/2015
3          48      2/20/2015

我想做的是编写一个查询,通过代表代码总结每个金额,所以它看起来像这样:

Rep Code SO Total SQ Total Inv Total
------------------------------------    
1        185      146      660
2        100       68      312
3        20        67      102

我还希望它仅在每个人的适当日期都在上周时才提取总数。 (所以今天-7)

如果这需要任何说明,请告诉我。

尝试使用 FULL JOIN:

DECLARE @start_date DATE = '20150101', @end_date DATE = '20150223'

    SELECT  t.RepCode ,
    SUM(SoAmount) AS SoAmount ,
    SUM(SqAmount) AS SqAmount ,
    SUM(InvAmount) AS InvAmount
    FROM ( 
        SELECT  COALESCE(so.RepCode, sq.RepCode, inv.RepCode) AS RepCode ,
        ISNULL(so.SoAmount, 0) AS SoAmount ,
        ISNULL(sq.SqAmount, 0) AS SqAmount ,
        ISNULL(inv.InvAmount, 0) AS InvAmount
        FROM    ( SELECT    RepCode ,
                    SUM(SoAmount) AS SoAmount
          FROM      SO
          WHERE     SoDate >= @start_date
                    AND SoDate <= @end_date
          GROUP BY  RepCode
        ) so
        FULL JOIN ( SELECT  RepCode ,
                            SUM(SqAmount) AS SqAmount
                    FROM    SQ
                    WHERE   SqDate >= @start_date
                            AND SqDate <= @end_date
                    GROUP BY RepCode
                  ) sq ON so.RepCode = sq.RepCode
        FULL JOIN ( SELECT  RepCode ,
                            SUM(InvAmount) AS InvAmount
                    FROM    INV
                    WHERE   InvDate >= @start_date
                            AND InvDate <= @end_date
                    GROUP BY RepCode
                  ) inv ON inv.RepCode = sq.RepCode     
    ) t
    GROUP BY t.RepCode