【问题标题】:Row_number & Partition By in SQL ServerSQL Server 中的行号和分区依据
【发布时间】:2018-05-13 14:00:44
【问题描述】:

我被另一列的列组上的行号卡住了。

这是我的数据集

PR_Cmd      PR_Expd
--------------------------
CVP909104   LVP1ET03904305      
CVP909105   LVP1ET03904306      
CVP909105   LVP1ET03904306      
CVP909105   LVP1ET03904306      
CVP909105   LVP1ET03904306      
CVP909105   LVP1ET03904306      
CVP909105   LVP1ET03904307      
CVP909106   LVP1ET03904308      

我想得到什么:

PR_Cmd      PR_Expd             Expd_Number
-------------------------------------------
CVP909104   LVP1ET03904305      1
CVP909105   LVP1ET03904306      1
CVP909105   LVP1ET03904306      1
CVP909105   LVP1ET03904306      2
CVP909105   LVP1ET03904307      3
CVP909106   LVP1ET03904308      1

【问题讨论】:

  • expd_number 的逻辑让我难以理解。其余行发生了什么? PK_OrderPK_Shipment 是什么?
  • 抱歉 PK_Order 和 PK_Shipment 是同一个 PR_Cmd 和 Pr_Expd
  • 好的,但是你还没有解释为什么每行都有它的数字背后的逻辑。是否只是每 3 行将数字增加 1?
  • 这是什么逻辑...?
  • 但是一个简单的ROW_NUMBER 会返回数字 1,2,3,4,5...不是 1,1,1,2,2,2...这里的用户不是不介意读者,你需要解释一下。

标签: sql sql-server row-number


【解决方案1】:

你似乎想要的是dense_rank()

dense_rank() over (partition by pr_cmd order by pr_expd)

这将为pr_cmd 的每个值重新编号。

【讨论】:

  • 否,但 row_number 必须在每个不同的 PR_Cmd 重新启动为 1,
  • @MohammedElMehdiKherrachi。 . .然后你想要partition by。请参阅修订版。
猜你喜欢
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 1970-01-01
  • 2018-08-18
  • 2014-11-22
  • 2011-02-20
相关资源
最近更新 更多