询问计数和总数的SQL查询

询问计数和总数的SQL查询,sql,sql-server,Sql,Sql Server,我被链接到一个数据库并被要求完成以下查询。购买肉类/家禽类物品的所有客户的客户id、公司名称、订单数量和订单总额。这是我到目前为止所做的,但不断出现错误。大多数问题都远远高于课堂水平,但我正在尽可能多地自己解决。我一直在使用前一个问题中的代码来帮助我。不确定它是否正确 WITH CTE AS ( SELECT Customers.CustomerID, Customers.CompanyName, Categories.CategoryName, COUNT(OrderID

我被链接到一个数据库并被要求完成以下查询。购买肉类/家禽类物品的所有客户的客户id、公司名称、订单数量和订单总额。这是我到目前为止所做的,但不断出现错误。大多数问题都远远高于课堂水平,但我正在尽可能多地自己解决。我一直在使用前一个问题中的代码来帮助我。不确定它是否正确

WITH CTE AS (

SELECT Customers.CustomerID, 
   Customers.CompanyName,
   Categories.CategoryName,
   COUNT(OrderID) AS total_orders,
   SUM(Quantity * UnitPrice) AS grand_total
   rn=ROW_NUMBER() OVER (ORDER BY Orders.OrderID)
FROM   Customers INNER JOIN
   Orders ON Orders.OrderID=Orders.CustomerID INNER JOIN
[Order Details] ON Orders.OrderID=[Order Details].OrderID
WHERE (Categories.CategoryName)= 'Meat/Poultry'

Group BY Orders.OrderID,
 Customers.CompanyName,
     Categories.CategoryName
)

SELECT  A.CustomerID,
A.CompanyName,
    A.total_orders,
A.grand_total,
(SELECT SUM(grand_total), COUNT(total_orders))
FROM CTE B
WHERE   B.grand_total > A.grand_total) RunningTotal
FROM CTE A
ORDER BY RunningTotal
SQL查询可以在以后分解和组合吗?我在想也许这会使编码更简单。除了我目前使用的方法或工具之外,还有其他方法或工具可以帮助初学者吗


谢谢,

在构建时,我对您的模式进行了一些猜测。我还构建了两个不同的查询,因为我发现这个需求不明确:

购买肉类/家禽类物品的所有客户的客户id、公司名称、订单数量和订单总额

按客户列出的所有订单中仅肉类/家禽产品的总额:

SELECT 
  c.CustomerID, c.CompanyName,
  OrderCount = COUNT(DISTINCT od.OrderID),
  [Meat/Poultry Total] = SUM(od.Quantity * od.UnitPrice)
FROM dbo.Customers AS c
INNER JOIN dbo.Orders AS o
ON c.CustomerID = o.CustomerID
INNER JOIN dbo.OrderDetails AS od
ON o.OrderID = od.OrderID
INNER JOIN dbo.Products AS p
ON od.ProductID = p.ProductID
INNER JOIN dbo.Categories AS cat
ON p.CategoryID = cat.CategoryID
WHERE cat.CategoryName = 'Meat/Poultry'
GROUP BY c.CustomerID, c.CompanyName;
SELECT
  c.CustomerID, c.CompanyName,
  OrderCount = COUNT(DISTINCT o.OrderID),
  GrandTotal = SUM(od.Quantity * od.UnitPrice)
FROM dbo.Customers AS c
INNER JOIN dbo.Orders AS o
ON c.CustomerID = o.CustomerID
INNER JOIN dbo.OrderDetails AS od
ON o.OrderID = od.OrderID
WHERE EXISTS
(
  SELECT 1 FROM dbo.OrderDetails AS od2
    INNER JOIN dbo.Products AS p
    ON p.ProductID = od2.ProductID
    INNER JOIN dbo.Categories AS cat
    ON p.CategoryID = cat.CategoryID
    WHERE cat.CategoryName = 'Meat/Poultry'
    AND od2.OrderID = o.OrderID
)
GROUP BY c.CustomerID, c.CompanyName;
所有订单的总和,其中每个订单中至少有一项是客户提供的肉类/家禽:

SELECT 
  c.CustomerID, c.CompanyName,
  OrderCount = COUNT(DISTINCT od.OrderID),
  [Meat/Poultry Total] = SUM(od.Quantity * od.UnitPrice)
FROM dbo.Customers AS c
INNER JOIN dbo.Orders AS o
ON c.CustomerID = o.CustomerID
INNER JOIN dbo.OrderDetails AS od
ON o.OrderID = od.OrderID
INNER JOIN dbo.Products AS p
ON od.ProductID = p.ProductID
INNER JOIN dbo.Categories AS cat
ON p.CategoryID = cat.CategoryID
WHERE cat.CategoryName = 'Meat/Poultry'
GROUP BY c.CustomerID, c.CompanyName;
SELECT
  c.CustomerID, c.CompanyName,
  OrderCount = COUNT(DISTINCT o.OrderID),
  GrandTotal = SUM(od.Quantity * od.UnitPrice)
FROM dbo.Customers AS c
INNER JOIN dbo.Orders AS o
ON c.CustomerID = o.CustomerID
INNER JOIN dbo.OrderDetails AS od
ON o.OrderID = od.OrderID
WHERE EXISTS
(
  SELECT 1 FROM dbo.OrderDetails AS od2
    INNER JOIN dbo.Products AS p
    ON p.ProductID = od2.ProductID
    INNER JOIN dbo.Categories AS cat
    ON p.CategoryID = cat.CategoryID
    WHERE cat.CategoryName = 'Meat/Poultry'
    AND od2.OrderID = o.OrderID
)
GROUP BY c.CustomerID, c.CompanyName;

请注意,客户3从未输入这些结果中的任何一个…

您需要按customerID分组,而不是按OrderID分组,或者在选择列表中显示OrderID而不是customerID,或者解释要显示的客户…尝试更改分组,但仍然出现错误。我要寻找的是输出CustomerID、CustomerName、OrderID以及从肉类/家禽类别购买物品的客户的订单总数和总成本。我应该用更新重新发布我的代码吗?请用示例数据和期望的结果进行分析。发布更多的代码不会有任何帮助,添加更多的单词问题也不会有任何帮助。很抱歉,直到我找到它,我才意识到什么是SQL小提琴。远远超过我的知识和能力。将来必须学会精通这一点。到目前为止,我们唯一的指南就是教科书和我们可以在网上搜索的任何东西。感谢您的帮助anyhoot。这只是一个在线的地方,您可以在这里发布CREATETABLE和INSERT语句,以便我们了解您的表、数据以及您想要的结果。什么版本的SQL Server?此外,Categories表与任何内容有何关联?连接为客户->订单->订单详细信息。我们如何知道类别?该表未作为联接的一部分被提及。我喜欢这里的内容。SELECT语句中的这些变量是OrderCount、Grandtotal吗?关键字也存在。在我使用的教程中看不到这一点。如果我想在结果中显示肉类/家禽类别,是将其添加到GROUP BY中,还是在SELECT语句中也需要它?抱歉,所有的问题。@allendks45不,这些不是T-SQL中的变量,变量由@前缀表示,例如@CustomerID。不要使用W3schools学习t-SQL,请参见和。买一份——你现在应该可以找到相当便宜的2008年版了。由于您已经知道该类别,您可以将其作为常量添加到选择列表中,例如,category='Meat/following'。好的,再次感谢。我使用的资源令人惊讶。这个网站太棒了,每个人都很有帮助。当然希望我能回答问题并提供帮助。也许在未来……很好地进入未来。这本书是下一本。