分组PARTITION BY及游标CURSOR的用法
基础数据表:
select * from dbo.RecommendationChanelVersionRelation;
数据如下:

要求按照ChannelVersionID分组,对每组中的OrderId根据ID由小到大的顺序,更新为1,2,3,4,5...
方法一(分组PARTITION BY):
IF OBJECT_ID('tempdb..#tempdt') IS NOT NULL
DROP TABLE #tempdt;
select RowNumOrderByChannelVersionID = ROW_NUMBER() OVER ( PARTITION BY ChannelVersionID ORDER BY orderid,id),* into #tempdt
from dbo.RecommendationChanelVersionRelation
order by orderid
#tempdt数据如下:

这样每组ChannelVersionID都有了1,2,3....表示按照一定规则排序的行号RowNumOrderByChannelVersionID:
最后一步,更新:
update rcr set rcr.OrderId=t.RowNumOrderByChannelVersionID
from #tempdt t left join dbo.RecommendationChanelVersionRelation rcr on t.id=rcr.id
方法二(游标CURSOR):
declare @rownum int;
declare @id int;
DECLARE My_Cursor CURSOR --定义游标
FOR (select ROW_NUMBER() over(PARTITION BY ChannelVersionID ORDER BY orderid,id) as num,id from dbo.RecommendationChanelVersionRelation ) --查出需要的集合放到游标中
for update of orderid
OPEN My_Cursor; --打开游标
FETCH NEXT FROM My_Cursor into @rownum,@id; --读取第一行数据
while @@FETCH_STATUS = 0
BEGIN
UPDATE dbo.RecommendationChanelVersionRelation set orderid=@rownum where id=@id
FETCH NEXT FROM My_Cursor into @rownum,@id; --读取第一行数据
END
CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标
GO
搞定!!!
分组PARTITION BY及游标CURSOR的用法的更多相关文章
- SQL 游标 Cursor 基本用法
/* table1结构如下 id int name varchar(50) */ declare @id int ) declare cursor1 cursor for --定义游标cursor1 ...
- 分区函数Partition By的与row_number()的用法以及与排序rank()的用法详解(获取分组(分区)中前几条记录)
partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition by用于给结果集分组,如果没有指 ...
- ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法,先分组,然后在组内排名,分组计算,主表与附表一对多取唯一等
ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法 今天在使用多字段去重时,由于某些字段有多种可能性,只需根据部分字段进行去重,在网上看到了row ...
- Oracle中Cursor的用法
关键字 概念 类型 异常处理 一 概念 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁 盘的表中 ...
- 转转转---ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法
ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法 http://blog.csdn.net/yinshan33/article/detail ...
- Cursor类用法:
Cursor类用法: http://www.2cto.com/kf/201109/103163.html Ctrl+Shift+G 查找类.方法和属性的引用.这是一个非常实用的快捷键,例如 ...
- PL/SQL使用游标CURSOR
一.使用游标 对于DML语句和单行select into ,oracle自动分配隐形游标.处理select返回多行语句,可以使用显式游标. 使用显示游标处理多行数据,也可使用SELECT..BULK ...
- SQL Server 数据库的维护(四)__游标(cursor)
--维护数据库-- --游标(cursor)-- --概述: 注:使用select语句查询结果的结果集是一个整体,如果想每次处理一行或一部分行数据,游标可以提供这种处理机制.可以将游标理解为指针.指针 ...
- css cursor url用法格式详解
css cursor url用法格式:css:{cursor:url('图标路径'),auto;} //IE,FF,chrome浏览器都可以 实例代码:html{cursor: url("h ...
随机推荐
- 【keras】用tensorboard监视CNN每一层的输出
from keras.models import Sequential from keras.layers import Dense, Dropout from keras.layers import ...
- [转] package-lock.json
其实用一句话来概括很简单,就是锁定安装时的包的版本号,并且需要上传到git,以保证其他人在npm install时大家的依赖能保证一致. 引用知乎@周载南的回答 根据官方文档,这个package-lo ...
- 深入了解servlet
一.web项目结构 |- WebRoot : web应用的根目录 |- 静态资源(html+css+js+image+vedio) |- W ...
- react 事件绑定 es5/es6
// vscode shift + ctrl + v 预览 es 5 写法 无参函数的绑定 first methods 定义函数: handleClick(e) { // e - 事件对象 e.pre ...
- CF1157B-Long Number题解
原题地址 题目大意:有一个\(n\)位数,其中的数字只有\(1\)~\(9\),不包括\(0\),每个\(1\)~\(9\)的数字有一个映射,映射也在\(1\)~\(9\)中,现在我们可以对这个\(n ...
- App自动化(2)--Python&Appium实现安卓手机九宫格解锁
九宫格作为常见的手势密码,我们在使用的时候,是从起点开始,按住不放,然后滑动手指,直到最后一个点松开手指,如果与设置的手势密码匹配,则解锁成功. 现在大多数九宫格作为一个元素存在,很难定位到每一个点. ...
- 对称加密之AES加密详解
最近有人问我AES对称加密是啥,我回答了个大概,发现自己不能清晰的讲出来,特此记录,以供学习 一.对称加密 对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decrypti ...
- np.random.shuffle(x)的用法
此函数主要是通过改变序列的内容来修改序列的位置.此函数只沿多维数组的第一个轴移动数组.子数组的顺序已更改,但其内容保持不变. 参数 x:即将被打乱顺序的list 返回值 无
- LA4080/UVa1416 Warfare And Logistics 最短路树
题目大意: 求图中两两点对最短距离之和 允许你删除一条边,让你最大化删除这个边之后的图中两两点对最短距离之和. 暴力:每次枚举删除哪条边,以每个点为源点做一次最短路,复杂度\(O(NM^2logN)\ ...
- window.location.href 传参中文乱码问题!!!
不是所有地方都会用Ajax 当你使用window.location.href 来传中文参数的时候 如何避免乱码问题 js 是这样写的 下面代码中 方式 封装编码 参数 username ...