一个分组查询 每组前 10 的sql 语句

USE tmp
go

CREATE TABLE Employee
(
ID int identity(1,1),
EmpName varchar(20),
EmpSalary varchar(10),
EmpDepartment varchar(20)
);

INSERT INTO Employee
SELECT '张三','5000','开发部' UNION ALL
SELECT '李四','2000','销售部' UNION ALL
SELECT '王麻子','2500','销售部' UNION ALL
SELECT '张三表叔','8000','开发部' UNION ALL
SELECT '李四表叔','5000','开发部' UNION ALL
SELECT '王麻子表叔','5000','销售部'

-- 现在使用来对 部门进行分组,使用over partition by分组,按照工资排序(使用ROW_NUMBER()函数来生成一列)
SELECT * FROM Employee
SELECT * ,ROW_NUMBER() OVER(PARTITION BY EmpDepartment ORDER BY EmpSalary) EmpNumber FROM Employee 这样实现后 创建临时表效率高

下面这样速度低啊 :

SELECT * FROM ( SELECT * , ROW_NUMBER() OVER ( PARTITION BY EmpDepartment ORDER BY EmpSalary ) EmpNumber FROM Employee1
) t
WHERE EmpNumber <= 10

 

posted on 2015-08-24 11:22  知鸟  阅读(1141)  评论(0)    收藏  举报