【问题标题】:SQL Server query for total dollar amount of orders per customerIDSQL Server 查询每个 customerID 的订单总金额
【发布时间】:2013-01-11 13:56:10
【问题描述】:

我有两个需要为其创建查询的表。我相信我也需要加入他们。

我需要从Customer 表中获取客户的CustomerNameAddress,但我还需要查询以显示客户下的所有订单的总美元金额。因此,如果客户今年总共花费了 300 美元,那么这 300 美元就是我想要实现的输出。

我有一个名为 Order Details 的表,它使用一个绑定到 CustomerIDOrderID,并且 Order Details 表中有 unitpricequantity 列。我正试图弄清楚如何将这些组合起来,但我快疯了。

我已经尝试过至少从订单中获取总数,但我肯定有语法错误:

SELECT unitprice, 
       quantity 
FROM   [Order details] (unitprice * quantity) AS Totalorders, 
       from [Order Details] 
WHERE  orderid > 0 

这也没有任何运气:

SELECT customers.companyname                                AS 'Company Name', 
       customers.address                                    AS 'Address', 
       [order details].unitprice * [order details].quantity AS 'Orders' 
FROM   customers 
       LEFT JOIN orders 
              ON customers.customerid = orders.customerid 
ORDER  BY customers.companyname, 
          customers.address, 
          orders 

谢谢

【问题讨论】:

  • 粘贴代码时请注意。我为你修正了一些语法错误。
  • 您有两个或三个表(客户、订单、订单详细信息)?
  • 是的,我实际上有 4 张桌子。客户、订单详情、订单和产品。

标签: sql sql-server sql-server-2012


【解决方案1】:

您需要加入订单详情并按聚合进行分组:

SELECT c.CompanyName AS "Company Name",
       c.Address AS "Address",
       sum(od.Unitprice * od.quantity) as "Orders"
FROM Customers c LEFT JOIN
     Orders o
     ON c.CustomerID = o.CustomerID left join
     [Order Details] od
     on od.orderid = o.orderid
GROUP BY c.CompanyName, c.Address
ORDER BY c.CompanyName, c.Address

此外,我还做了一些风格上的改变。我为表名添加了别名。我发现阅读 c.CompanyName 而不是 Customers.CompanyName 要容易得多。我将列别名上的分隔符更改为使用双引号而不是单引号。我将单引号与语句中的字符串常量相关联。

【讨论】:

  • 实际上我不得不更改数据类型,因为它给了我一个乘法错误,但这有效!谢谢一百万!!!!
【解决方案2】:

如果是一对多关系,您的查询将类似于:

SELECT
Customers.CompanyName AS 'Company Name',
Customers.Address AS 'Address',
SUM(O.Unitprice * O.quantity) as 'Orders'
FROM Customers
LEFT JOIN [Order Details] O
ON Customers.CustomerID = O.CustomerID
GROUP BY Customers.CompanyName, Customers.Address
ORDER BY Customers.CompanyName, Customers.Address

【讨论】:

  • 这与我需要的非常接近,但订单详细信息表中没有 CustomerID。我的 Orders 表中有一个 CustomerID。我的 Orders 表和 Order Details 表中都有 OrderID。
  • 感谢您的澄清。如果您在问题中明确指出这一点会有所帮助
猜你喜欢
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多