在SQL Server上分组数据

cmo*_*nti 6 sql t-sql sql-server rank

我在SQL Server中有这个表:

Year    Month       Quantity
----------------------------
2015    January     10
2015    February    20
2015    March       30
2014    November    40
2014    August      50
Run Code Online (Sandbox Code Playgroud)

如何识别不同的年份和月份,再添加两列,将相同年份的数字组合在一起,然后按顺序排列不同的月份,例如示例

Year    Month       Quantity    Group   Subgroup
------------------------------------------------
2015    January     10          1       1
2015    February    20          1       2
2015    March       30          1       3
2014    November    40          2       1
2014    August      50          2       2
Run Code Online (Sandbox Code Playgroud)

Ami*_*mit 5

您可以使用DENSE_RANK为您计算组:

SELECT t1.*, DENSE_RANK() OVER (ORDER BY Year DESC) AS [Group],
  DENSE_RANK() OVER (PARTITION BY Year ORDER BY DATEPART(month, Month + ' 01 2010')) AS [SubGroup]
FROM t1
ORDER BY 4, 5
Run Code Online (Sandbox Code Playgroud)

看到这个小提琴.