SQL Server查询来自多个表的总和

时间:2018-09-21 19:42:04

标签: sql sql-server sum

我尝试从中报告3个表,这些表都相关,但是记录数不同。我想要每个订单的摘要行,以显示工作说明,总价和总成本。

我的表格如下:

价格

| Order | Line # | Description  | Price |
+-------+--------+--------------+-------+
| 1     | 1      | Line 1 job#1 | 100   |
| 1     | 2      | Line 2 job#1 | 30    |
| 2     | 1      | Line 1 job#2 | 100   |
| 3     | 1      | Line 1 job#3 | 75    |

成本行

| Order | Line # | Cost record | Cost |
+-------+--------+-------------+------+
| 1     | 1      | 1           | 80   |
| 1     | 2      | 2           | 80   |
| 1     | 2      | 3           | 50   |
| 2     | 1      | 1           | 75   |
| 3     | 1      | 1           | 50   |
| 3     | 1      | 2           | 50   |

订单标题

| Order | Description | Sales Person |
+-------+-------------+--------------+
| 1     | Order # 1   | 1            |
| 1     | Order #2    | 2            |
| 1     | Order #3    | 1            |

我一直在通往许多相关的行。我一直在尝试使用求和的子查询,但是我无法使其正常工作。

预期结果:

 | Order | Description | Price | Cost | Sales Person |
 +-------+-------------+-------+------+--------------+
 | 1     | Order #1    | 130   | 210  | 1            | 
 | 2     | Order #2    | 100   | 75   | 2            |
 | 3     | Order #3    | 75    | 100  | 1            | 

1 个答案:

答案 0 :(得分:1)

我认为您的示例数据有误,第一列应读取123,而不是三倍1。至少您想要的结果使这看起来很合理。

将成本和价格加入订单,然后GROUP BY将订单和成本和价格的总和计算出来。

 SELECT o.[Order],
        o.[Description],
        sum(p.[Price]) [Price],
        sum(c.[Cost]) [Cost],
        o.[Sales Person]
        FROM [Order Header] o
             LEFT JOIN [Cost lines] c
                       ON c.[Order] = o.[Order]
             LEFT JOIN [Prices] p
                       ON p.[Order] = o.[Order]
        GROUP BY o.[Order],
                 o.[Description],
                 o.[Sales Person];