易截截图软件、单文件、免安装、纯绿色、仅160KB

Sql 里面 ROW_NUMBER 应用场景

ROW_NUMBER 返回按一定规则排序的当前记录对应的行号
比如我们有这样一个应用场景:
现在有个比赛,需要从网上参赛者从从网络上报名,然后去最早报名的5个人参加比赛,为此我们实现如下:
1.为此我们要建立一张表来保存报名参赛者的姓名及起报名时间
CREATE 
TABLE [dbo].[UserEnroll](
[UserName] [nvarchar]
(50) NULL, --参赛者的姓名
[EnrollTime] [datetime]
NULL --报名时间

ON  [PRIMARY]
2.我们Sql 向表中插入数据,模拟参赛者报名 
insert
  into [dbo].[UserEnroll] values('CC', GETDATE())
insert  into [dbo].[UserEnroll] values('CC1', DateAdd(DAY,-1,GETDATE()))
insert 
into [dbo].[UserEnroll] values('CC2', DateAdd(DAY,-2,GETDATE()))
insert 
into [dbo].[UserEnroll] values('CC3', DateAdd(DAY,-3,GETDATE()))
insert 
into [dbo].[UserEnroll] values('CC4', DateAdd(DAY,-4,GETDATE ()))
insert 
 into [dbo].[UserEnroll] values('CC5', DateAdd(DAY,-5,GETDATE()))
insert 
 into [dbo].[UserEnroll] values('CC6', DateAdd(DAY,-6,GETDATE()))
insert
 into [dbo].[UserEnroll] values('CC7', DateAdd(DAY,-7,GETDATE()))
 
3.删除非最早5报名的人
  a.  给表加上行号
SELECT
*, ROW_NUMBER() OVER(ORDER BY EnrollTime) AS RowNum
from [dbo].[UserEnroll]
   结果如下:
   UserName EnrollTime RowNum
CC7 2010-05-11 17:38:42.403 1
CC6 2010-05-12 17:38:42.403 2
CC5 2010-05-13 17:38:42.403 3
CC4 2010-05-14 17:38:42.403 4
CC3 2010-05-15 17:38:42.403 5
CC2 2010-05-16 17:38:42.403 6
CC1 2010-05-17 17:38:42.403 7
CC 2010-05-18 17:38:42.403 8
 b. 那么我们删除RowNum 大于5的记录
 
WITH UserEnrollWithRowNumber AS (
SELECT *, ROW_NUMBER() OVER(ORDER BY EnrollTime) AS
RowNum from [dbo].[UserEnroll])
DELETE from  UserEnrollWithRowNumber
WHERE RowNum >  5
结果为 effect 3 rows
 c. 再用a步中的语句查询报名表结果为
UserName EnrollTime RowNum
CC7 2010-0


相关文档:

SQL server 2008 创建主键为自增列的表

使用Tranact-SQL 编写代码来创建一个新表:
 
USE [OnlineJudge]
GO
/****** Object: Table [dbo].[User1] Script Date: 05/17/2010 14:05:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[User2](/*notice convert the tablename*/
[num] [int]IDENTITY(1,1) NOT N ......

ORACLE中用rownum分页并排序的SQL语句

第一种: 
select b.* from
 ( select a.*, rownum row_num from
   (select t.* from A05_ORGANIZATION t order by org_name_en asc) a
  ) b
 where b.row_num  between 1 and 5  order by b.row_num asc
第二种(更高效):
select b.* from
 ( select a.*, rown ......

java Annotation 拼装SQL语句

声明字段映射
@Target(ElementType.FIELD)  
@Retention(RetentionPolicy.RUNTIME) 
public @interface FiledRef
{
    String fieldName();
}
声明表映射
@Target(ElementType.TYPE)  
@Retention(RetentionPolicy.RUNTIME)
public @interface TableRef
{
 & ......

修改SQL 2005数据库默认不区分大小写

创建的数据库中区分大小写
create database test  COLLATE  Chinese_PRC_CS_AS  
数据库中区分大小写
alter database test  COLLATE  Chinese_PRC_CS_AS 
恢复默认的不区分大小写
alter database test  COLLATE  Chinese_PRC_CI_AS ......

pl/sql developer的使用

在“新建”菜单中,有Program window,Test window,SQL window和Command window等。
SQL window和Command window有什么区别??
Command window实现了SQL*Plus的所有功能,允许运行sql*plus命令,sql命令,sql脚本。
SQL window用于执行sql语句,显示sql输出,执行统计信息。(测试sql语句,查看表中的数据, ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号