分配"线"编号到记录组

时间:2018-04-04 13:53:08

标签: sql sql-server tsql grouping sql-server-2016

我有一些看起来如下的数据(这只是一小部分):

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)

感谢您的任何建议。

2 个答案:

答案 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 byorder by
  • 之前
  • 无需重复partition byorder by条款中的键。

如果你想处理缺失的年份,那么2017年总是1,2019总是3,即使2018缺失,你可以使用算术和窗函数:

select (1 + year - min(year) over ())