我有一些看起来如下的数据(这只是一小部分):
ID Desc Proj_Id Year Master_Line_Num
1 "Development" "C102" 2017 ?Should be 1?
2 "Development" "C102" 2018 ?Should be 2?
3 "Development" "C102" 2019 ?Should be 3?
4 "Dev" "B123" 2017 ?Should be 1?
5 "Dev" "B123" 2018 ?Should be 2?
6 "Dev" "B123" 2019 ?Should be 3?
我在编写用于分配Master_Line_Num的SQL时遇到了一些麻烦。基本上," Desc"和" Proj_ID"将在表中具有特定年份的行。我想按照desc / proj的年份顺序分配master_line_num。那可能吗?我想要的结果是最右边的列上的值(1,2,3,1,2,3)
感谢您的任何建议。
答案 0 :(得分:2)
row_number() over (order by [DESC], Proj_ID, Year partition by [DESC], proj_id)
答案 1 :(得分:2)
我相信你想要的是:
row_number() over (partition by [DESC], proj_id order by [year])
我打算修复Joel的答案,但问题太多了:
partition by
在order by
partition by
和order by
条款中的键。如果你想处理缺失的年份,那么2017年总是1,2019总是3,即使2018缺失,你可以使用算术和窗函数:
select (1 + year - min(year) over ())