【问题标题】:How to add sequence row numbers based on column values SQL Server如何根据列值添加序列行号 SQL Server
【发布时间】:2019-03-25 06:38:16
【问题描述】:

我在 SQL Server 中有下表;

DesiredRowNo. Customer  Date        NID                 SID     Contacts  AG
 1               AAA    04/09/2018  15357989260016600   100743  1          1
 1               AAA    04/09/2018  15358110980018300   100743  1          1
 1               AAA    04/09/2018  15358197620012800   100743  1          1
 2               AAA    21/09/2018  15358902310016400   100743  1          1
 2               AAA    21/09/2018  15358999300015200   100743  1          1
 3               AAA    29/09/2018  15359624190012200   100743  1          1
 3               AAA    29/09/2018  15359896100010500   100702  1          1
 4               AAA    30/09/2018  15360551640011900   100743  1          1
 1               BBB    05/09/2018  15357989260016600   100743  1          1
 1               BBB    05/09/2018  15358110980018300   100743  1          1
 2               BBB    08/09/2018  15358197620012800   100743  1          1
 3               BBB    15/09/2018  15358902310016400   100743  1          1
 3               BBB    15/09/2018  15358999300015200   100743  1          1
 4               BBB    19/09/2018  15359624190012200   100743  1          1
 5               BBB    24/09/2018  15359896100010500   100702  1          1
 5               BBB    24/09/2018  15360551640011900   100743  1          1

我需要第一列 (DesiredRowNo.) 根据客户和日期显示排名/行号。因此对于客户 AAA,所有 相同日期的行排名为 1,然后 下一个唯一日期排名为 2,以此类推。 (必须按日期顺序排列)

请参阅上面的 DesiredRowNo. 值,以更好地解释我想要实现的目标。

我试过了;

ROW_NUMER() over (partition by Customer, date order by date) 

但这似乎没有按要求给出正确的顺序。

有什么想法吗?

【问题讨论】:

  • 如果您按日期分区并按日期排序,除了随机之外,您期望的顺序是什么(如果要求您按顺序放置 3 个日期,并且它们都是相同的日期,您知道哪个是没有更多细节的“正确”顺序)?您需要按不同的列排序。

标签: sql-server function sequence partition row-number


【解决方案1】:

试试这个:

 select  tab.DesiresRowNo.,final.Customer,
final.NID,final.SID,final.Contacts,final.AG
 from Table final
 left join 
 ( select
 ROW_NUMBER() OVER(ORDER BY Customer ASC) AS DesiresRowNo.,
 Customer,Date
 from Table
 group by Customer,Date )tab
 on final.Customer=tab.Customer
 and final.Date=tab.Date

【讨论】:

    【解决方案2】:

    糟糕,这是一个巨大的疏忽。我已经用这个修复了它:

    DENSE_RANK() over (partition by Customer order by date)
    

    感谢拉努的指导

    【讨论】:

      猜你喜欢
      • 2021-11-29
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      相关资源
      最近更新 更多