如何根据列值 SQL 服务器添加序列行号
How to add sequence row numbers based on column values SQL Server
我在 SQL 服务器中有以下 table;
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
我需要第 1 列 (DesiredRowNo.) 显示基于客户和日期的 rank/row 编号。因此,对于 Customer AAA,具有 相同日期的所有行排名为 1,然后 下一个唯一日期排名为 2,等等。 (必须根据日期顺序)
请参阅上面的 DesiredRowNo. 值,以更好地解释我要实现的目标。
我试过使用;
ROW_NUMER() over (partition by Customer, date order by date)
但这似乎没有按要求给出正确的排序。
有什么想法吗?
糟糕,这是一个巨大的疏忽。我用这个修复了它:
DENSE_RANK() over (partition by Customer order by date)
感谢你的驯牛 Larnu
试试这个:
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
我在 SQL 服务器中有以下 table;
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
我需要第 1 列 (DesiredRowNo.) 显示基于客户和日期的 rank/row 编号。因此,对于 Customer AAA,具有 相同日期的所有行排名为 1,然后 下一个唯一日期排名为 2,等等。 (必须根据日期顺序)
请参阅上面的 DesiredRowNo. 值,以更好地解释我要实现的目标。
我试过使用;
ROW_NUMER() over (partition by Customer, date order by date)
但这似乎没有按要求给出正确的排序。
有什么想法吗?
糟糕,这是一个巨大的疏忽。我用这个修复了它:
DENSE_RANK() over (partition by Customer order by date)
感谢你的驯牛 Larnu
试试这个:
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