【发布时间】:2021-07-29 09:18:24
【问题描述】:
我有主表和事务表。
1 shipmentheader
2 shimentdetails
我已经加入(内连接)两个表,数据就像
装运头
headerid header
---------------
1 h1
2 h2
订单详情
detailid headerid details createddate
------------------------------------------
1 1 d1
2 1 d2
3 2 d2
现在当我加入这两个时,我想根据Headerid (shipmentmaster) 生成行号。
加入数据后,排序应在详细信息表createddate 上。我没有低于行号,我想根据HeaderID order by shipping detail table created date 保持增加的数量,
如果存在三个标题 ID,那么它将保持行号 1,2,3 并保持相同的 1,1,2,2 相同,如果加入详细信息表。
RowNumber headerid header details createddate
-------------------------------------------------
1 1 h1 d1 date
1 2 h1 d3 date
2 2 h2 d2 date
以下是我尝试过的查询,但它们不起作用,也尝试过rank()
select
row_number() over (partition by sh.ShipmentHeaderID order by sd.createddate) as 'RowNumber',
sh.headerid, sh.header, sd.details, sd.createddate
from
ShipmentHeader as sh
inner join
ShipmentDetails as sd on sh.ShipmentHeaderID = sd.ShipmentHeaderID
select
dense_rank() over (partition by sh.ShipmentHeaderID order by sd.createddate) as 'RowNumber',
sh.headerid, sh.header, sd.details, sd.createddate
from
ShipmentHeader as sh
inner join
ShipmentDetails as sd on sh.ShipmentHeaderID = sd.ShipmentHeaderID
为此,我使用 row_number、dense_rank、rank、partition by 加入了以下查询。但我无法得到我想要的结果。
我试图得到这样的输出:
RowNumber headerid header details createddate
------------------------------------------------------
1 1 h1 d1 date
1 2 h1 d3 date
2 2 h2 d2 date
你能帮我解决这个问题吗?
【问题讨论】:
-
应该是
dense_rank() over (order by sh.ShipmentHeaderID) -
@Squirrel,我可以,但有一个问题是我们需要根据最近的订单显示数据,按发货详细信息创建日期(交易详细信息)表...请您帮忙考虑一下。
-
根据您的样本数据和预期结果,
RowNumber似乎与date无关。也许您可以发布更多示例数据和预期结果来说明这一点
标签: sql sql-server sql-server-2008 window-functions