over分组之后,想给不同的group编上号

sufsoft 2013-06-25 11:29:37
使用的sql如下:

SELECT BusinessEntityID, TerritoryID
,DATEPART(yy,ModifiedDate) AS SalesYear
,CONVERT(varchar(20),SalesYTD,1) AS SalesYTD
,CONVERT(varchar(20),AVG(SalesYTD) OVER (PARTITION BY TerritoryID
ORDER BY DATEPART(yy,ModifiedDate)
),1) AS MovingAvg
,CONVERT(varchar(20),SUM(SalesYTD) OVER (PARTITION BY TerritoryID
ORDER BY DATEPART(yy,ModifiedDate)
),1) AS CumulativeTotal
FROM Sales.SalesPerson
WHERE TerritoryID IS NULL OR TerritoryID < 5
ORDER BY TerritoryID,SalesYear;

生成的效果如下:


这个已经实现。

那么现在我想在最前边加一个列groupNumber,这个列根据TerritoryID 来显示,也就是TerritoryID为Null的,groupNumber就为1;TerritoryID为1的,groupNumber就为2...最后的效果图如下:


这个如何实现呢?在线等!!!

...全文
80 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sufsoft 2013-06-26
  • 打赏
  • 举报
回复
引用 3 楼 yiyishuitian 的回复:
[quote=引用 2 楼 sufsoft 的回复:] [quote=引用 1 楼 yiyishuitian 的回复:] 试试Row_number函数
用过这个Row_number() over(partition by column_1 order by column_2 desc),但是这个属于一个group内相同数据的排序,就像这样子! [/quote] 手机打字不好写语句,你再试试dense_rank这两个函数应该可以解决你的问题。[/quote] 谢谢你了yiyishuitian~ 用这个应该可以实现:dense_rank() over(order by column_1). 我明天弄好之后没问题就可以结贴了,到时给你分哈!
yiyishuitian 2013-06-25
  • 打赏
  • 举报
回复
引用 2 楼 sufsoft 的回复:
[quote=引用 1 楼 yiyishuitian 的回复:] 试试Row_number函数
用过这个Row_number() over(partition by column_1 order by column_2 desc),但是这个属于一个group内相同数据的排序,就像这样子! [/quote] 手机打字不好写语句,你再试试dense_rank这两个函数应该可以解决你的问题。
sufsoft 2013-06-25
  • 打赏
  • 举报
回复
引用 1 楼 yiyishuitian 的回复:
试试Row_number函数


用过这个Row_number() over(partition by column_1 order by column_2 desc),但是这个属于一个group内相同数据的排序,就像这样子!
yiyishuitian 2013-06-25
  • 打赏
  • 举报
回复
试试Row_number函数

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧