【问题标题】:SQL 查询每个类别的单元数
【发布时间】:2022-01-23 10:29:45
【问题描述】:

需要有关 SQL Server 查询的帮助才能获得以下结果。

一个 SQL 查询,用于报告每个类别中每周的每一天订购了多少单位

这是当前语法

SELECT TOP 3  ProductID , ProductQty  
FROM OrderDetails
ORDER BY  ProductQty DESC;

这是来自数据库的图像

非常感谢任何帮助。

谢谢

【问题讨论】:

  • 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
  • 请提供minimal reproducible example,即包括您想要的结果和您的尝试。

标签: sql sql-server tsql


【解决方案1】:

我们可以通过将逻辑分成两部分来得到您需要的结果。

  1. 首先,从订单详情中获取产品总数
  2. 其次,我们可以按类别对从最高到最低的产品进行排名,并从每个类别中提取前 3 个产品。
;WITH CTE_Data AS (
SELECT PD.PrdCategory AS PrdCategory, OD.ProductID AS ProductID, SUM(ProductQty) AS ProductQty
FROM OrderDetails OD (NOLOCK)
INNER JOIN ProductDetails PD (NOLOCK) ON OD.ProductID = PD.PrdId
GROUP BY PD.PrdCategory, ProductID
)
, CTE_Data2 AS(
    SELECT PrdCategory, ProductID, ProductQty, ROW_NUMBER() OVER(PARTITION BY PrdCategory, ProductID ORDER BY ProductQty DESC) AS RowNo
    FROM CTE_Data
)
SELECT ProductID, ProductQty
FROM CTE_Data2
WHERE RowNo IN (1,2,3)

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
  • NOLOCK 是什么意思,你想解决什么锁定问题? NOLOCK 不是“更快”开关,而是“给出错误结果”开关
  • 查询不成功 SELECT Products.PrdCategory AS PrdCategory, OrderDetails.ProductID, SUM(OrderDetails.ProductQty) AS ProductQty FROM OrderDetails INNER JOIN Products ON OrderDetails.ProductID = Products.PrdId GROUP BY Products.PrdCategory , 产品.PrdId;请建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
相关资源
最近更新 更多