如何将选择语句连接在一起

时间:2019-07-04 03:46:07

标签: sql-server

我有一个示例数据库,其中包含3个不同的表customersordersorderdetails

任务是显示客户名称和客户表中的地址,然后按订单ID显示每个订单的总金额。订单详细信息有几次订单ID,是按单价x价格计算的,因此我必须在进行计算后将它们相加。

客户有一个字段customerid,我可以使用该字段与具有相同字段的订单进行合并,orders表具有orderid,可以将其用于合并到orderdetails和对订单总数求和,但是我不知道如何将信息在一起。 “客户”表没有用于计算总订单的字段,只有“客户ID”。因此,我尝试从3个表中捏合在一起,这些表中有一些相关的列,但每个表中都没有。

我可以执行2条单独的select语句,每条语句都符合我的期望,但是我一直试图将信息汇总在一起,但是无法做到。

  SELECT c.CustomerID, c.[Address], o.orderid
  FROM Customers c
  Join Orders o
  ON c.CustomerID = o.CustomerID

  --how to join these together?

  SELECT od.orderid, SUM(od.UnitPrice*od.Quantity) as 'Subtotal'
  FROM OrderDetails od
  Join Orders o
  ON od.OrderID = o.OrderID
  Group by od.OrderID

我正在尝试显示以下信息:

Customer Name, Address, OrderID, and Order Total.

3 个答案:

答案 0 :(得分:1)

尝试-

 SELECT c.CustomerID, c.[Address], od.orderid, SUM(od.UnitPrice* od.Quantity) as 'Subtotal'
  FROM OrderDetails od
  Join Orders o
  ON od.OrderID = o.OrderID
  join Customers c  ON c.CustomerID = o.CustomerID
  Group by c.CustomerID,  c.[Address], od.OrderID

答案 1 :(得分:0)

您可以将三个表连接在一起,如下所示。我正在使用派生表OrderDetails来计算orderId级别的小计。

SELECT c.CustomerID, c.[Address], o.orderid, SUM(od.Subtotal) as 'Subtotal'
  FROM Customers c
  Join Orders o
  ON c.CustomerID = o.CustomerID
  join (SELECT orderid, SUM(od.UnitPrice*od.Quantity) as Subtotal from OrderDetails od GROUP BY OrderId) as OrderDetails od
  ON od.OrderID = o.OrderID
group by c.CustomerID, c.[Address], o.orderid

答案 2 :(得分:0)

Mukesh的回答直接将我引向了最后,我能够通过以下内容将customerid排除在结果之外。这很有帮助,我感谢大家的投入。

  SELECT c.CompanyName, c.[Address], od.orderid, SUM(od.UnitPrice* od.Quantity) as
  'Subtotal'
  FROM OrderDetails od
  Join Orders o
  ON od.OrderID = o.OrderID
  join Customers c  ON c.CustomerID = o.CustomerID
  Group by c.CompanyName,  c.[Address], od.OrderID