【问题标题】:How to join select statements together如何将选择语句连接在一起
【发布时间】:2019-07-04 03:46:07
【问题描述】:

我有一个包含 3 个不同表的示例数据库,customers、orders、orderdetails。

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

Customers 有一个字段 customerid,我可以用它来加入具有相同字段的订单,orders 表有 orderid,我可以用它来加入 orderdetails 并对订单总额求和,但我不知道如何放置信息一起。客户表没有计算总订单的字段,只有customerid。所以,我试图从 3 个表中捏在一起,其中有一些相关的列,但不是每个表中都存在。

我可以执行 2 个单独的选择语句,每个语句都按照我的预期执行,但我一直在尝试将信息汇总在一起,但一直无法做到。

  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.

【问题讨论】:

  • 这里有一个提示,尝试一次将所有三个表加入...SELECT ..... FROM Customers c JOIN Orders o ON c.CustomerID = o.CustomerID JOIN OrderDetails od ON od.OrderID = o.OrderID
  • 我建议 UNION
  • 感谢您的回复。我会试试这个。

标签: sql-server


【解决方案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

【讨论】:

【解决方案2】:

您可以将三个表连接在一起,如下所示。我正在使用派生表 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

【讨论】:

【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多