TOP AND APPLY

select top(n) from table order by fieldname

如果根据fieldname不能确定顺序,则会产生不稳定的输出.

若使用 with ties 查询结果集会包含额外的行,这些额外行在排列上的值与top最后一行排列的值相同.

apply 运算符有两种形式:cross apply and outer apply.类似 inner join and left outer join.

可以把外部查询的列作为参数传递给表值函数.

使用top and apply 组合解决常见的问题

1.每组中的top(n)

方案一:使用 row_number() over (partition by ) 子句 生成行号.

适用的场景是表不能太大.太大的话效率也会低,因为生成行号需要扫描一遍表或索引.

方案二:top(n)关联子查询

方案三:apply 与top(n)关联子查询

例子:

select e.empid,a.orderid,a.custid,a.orderdate,a.requireddate

from

hr.employees as e

cross join

(select top(3) orderid,custid,orderdate,requireddate from sales.orders as o

where o.empid=e.empid

order by orderdate desc,orderid desc) as a;

2匹配当前值的前一个值

方案一:使用 apply 也有较好的执行效率.

方案二:使用CTE 与row_number()相结合的方法.

节选自:inside sqlserver2008 技术内幕 tsql 查询

 

posted on 2011-09-03 08:44  tneduts  阅读(183)  评论(0编辑  收藏  举报

导航