sql ROW_NUMBER() 排序函数
2016-03-21 10:50
387 查看
关于SQL的partition by 字段的一些用法心得-可实现自动分配组号跟归组合并
2011-03-06 13:10
2011-03-06 13:10
关于SQL的partition by 字段的一些用法心得 先看例子: if object_id('TESTDB') is not null drop table TESTDB create table TESTDB(A varchar(8), B varchar(8)) insert into TESTDB select 'A1', 'B1' union all select 'A1', 'B2' union all select 'A1', 'B3' union all select 'A2', 'B4' union all select 'A2', 'B5' union all select 'A2', 'B6' union all select 'A3', 'B7' union all select 'A3', 'B3' union all select 'A3', 'B4' -- 所有的信息 SELECT * FROM TESTDB A B ------- A1 B1 A1 B2 A1 B3 A2 B4 A2 B5 A2 B6 A3 B7 A3 B3 A3 B4 -- 使用PARTITION BY 函数后 SELECT *,ROW_NUMBER() OVER(PARTITION BY A ORDER BY A DESC) NUM FROM TESTDB A B NUM ------------- A1 B1 1 A1 B2 2 A1 B3 3 A2 B4 1 A2 B5 2 A2 B6 3 A3 B7 1 A3 B3 2 A3 B4 3 可以看到结果中多出一列NUM 这个NUM就是说明了相同行的个数,比如A1有3个,他就给每个A1标上是第几个。 -- 仅仅使用ROW_NUMBER() OVER的结果 SELECT *,ROW_NUMBER() OVER(ORDER BY A DESC)NUM FROM TESTDB A B NUM ------------------------ A3 B7 1 A3 B3 2 A3 B4 3 A2 B4 4 A2 B5 5 A2 B6 6 A1 B1 7 A1 B2 8 A1 B3 9 可以看到它只是单纯标出了行号。 -- 深入一点应用 SELECT A = CASE WHEN NUM = 1 THEN A ELSE '' END,B FROM (SELECT A,NUM = ROW_NUMBER() OVER(PARTITION BY A ORDER BY A DESC) FROM TESTDB) T A B --------- A1 B1 B2 B3 A2 B4 B5 B6 A3 B7 B3 B4 可以看出结果按照A中相同项合并了。效果可以结合这个来做。 |
相关文章推荐
- Sql或String字符串太长的写法
- SQL中的CASE
- 数据库操作代码
- 在SQL Server和Access中清空表并重…
- SQL Server数据库自增长标识列的更…
- mysql 执行状态分析 show processlist
- 数据类型的选用
- sql isnull函数的使用
- MYSQL的随机抽取实现方法
- oracle集合类型,标量类型,记录类型辨析
- C#向ACCESS数据库插入空值
- SQL函数
- mysql error:Table 'performance_schema.session_variables' doesn't exist
- mysql replace()函数
- C#向ACCESS数据库插入空值
- Oracle内正则替换Clob类型内的字符串
- {dede:sql 中如何传入参数,
- WinForms应用程序操作Access数据库…
- WinForms应用程序操作Access数据库…
- 数据库复习