如何基于列值添加序列行号SQL Server

时间:2018-10-20 17:10:49

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

我在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) 

但是,这似乎并未提供所需的正确排序。

有什么想法吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

感谢您对Larnu的指导