【发布时间】:2021-10-10 21:21:35
【问题描述】:
我有一个包含两列的表:OrderId 和 ProductId,我需要一个查询来显示这两列并添加另外两列,其中一列会告诉我这个特定 ProductId 的订单数来之前这个订单(orderIds 是按升序创建的),另一列会告诉我这个特定项目有多少订单来了之后这个订单。
所以,例如,这应该是结果:
| OrderId | ProductId | OrdersBefore | OrdersAfter |
|---|---|---|---|
| 245 | PR-987 | 0 | 2 |
| 246 | GH-764 | 0 | 1 |
| 247 | NV-102 | 0 | 0 |
| 248 | PR-987 | 1 | 1 |
| 249 | PR-987 | 2 | 0 |
| 250 | GH-764 | 1 | 0 |
我一直在摆弄再次将表添加为连接,尝试将其作为子查询,以及各种其他可能的方法,但它要么根本不起作用,要么无休止地继续下去,要么返回错误的结果。所以我基本上被困住了,如果有任何帮助或指导,我将不胜感激。
这是我尝试过的两种方法(其他的我不记得了,因为我尝试了很多方法的多次迭代),都没有完成查询:
1.
SELECT OrderId
, ProductId
, (
SELECT COUNT(*)
FROM Orders o2
WHERE o2.ID < Orders.ID
AND ProductID = ProductID
)
OrdersBefore
, (
SELECT COUNT(*)
FROM Orders o2
WHERE o2.ID > Orders.ID
AND ProductID = ProductID
)
OrdersAfter
FROM Orders
SELECT o.OrderId
, o.ProductId
, COUNT(DISTINCT before.ID) OrdersBefore
, COUNT(DISTINCT after.ID) OrdersAfter
FROM Orders o
LEFT JOIN Orders before ON before.ProductId = o.ProductId
AND before.OrderId< o.OrderId
LEFT JOIN Orders after ON after.ProductId = o.ProductId
AND after.OrderId> o.OrderId
GROUP BY o.OrderId
, o.ProductId
【问题讨论】:
-
根据问题指南,请展示您尝试过的内容并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。还显示将产生所需结果的示例数据。
-
提示 - count over
标签: sql sql-server tsql join