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

SQL Server2005 apply的一些运用

例子:找出每个歌手销量最高的3首歌
create table singer_info
(
id int primary key identity(1,1),
name varchar(20),
song varchar(20),
amount int
)
 
insert into singer_info values('jay','aaa',1000)
insert into singer_info values('jay','bbb',2000)
insert into singer_info values('jay','ccc',3000)
insert into singer_info values('jay','ddd',4000)
insert into singer_info values('jay','eee',5000)
insert into singer_info values('jay1','fff',1000)
insert into singer_info values('jay1','ggg',2000)
insert into singer_info values('jay1','hhh',3000)
insert into singer_info values('jay1','iii',4000)
insert into singer_info values('jay2','jjj',1000)
insert into singer_info values('jay2','kkk',2000)
insert into singer_info values('jay2','lll',3000)
insert into singer_info values('jay2','mmm',4000)
insert into singer_info values('jay3','nnn',1000)
 
(1)使用function apply
create function gettop
(@name varchar(20))
returns table
as
return (select top(3)id,name,song,amount
from singer_info
where name = @name
order by amount desc)
 
select distinct b.id,b.name,b.song,b.amount
from singer_info a
cross apply
gettop(a.name)as b
 
(2)使用apply
select distinct c.id,c.name,c.song,c.amount
from singer_info a
cross apply
(select top(3)id,name,song,amount
from singer_info b
where b.name = a.name
order by amount desc) as c
order by c.name asc,c.amount desc
 
(3)使用over partition by
select * from
(select a.id,a.name,a.song,a.amount,
row_number() over(partition by a.name order by a.name,a.amount desc) rn
from singer_info a)b
where b.rn<=3


相关文档:

SQL Server 2005 (MSSQLSERVER) 服务不能启动

SQL Server 2005 (MSSQLSERVER) 服务不能启动
原因:VIA协议”给启用了,停用“VIA协议”问题解决。
"VIA协议"停用方法:开始->程序->Microsoft SQL Server 2005->配置工具->SQL Server Configuration Manager ->打开后找到"SQL Server 2005 网络配置"->MSSQLSERVER 属性的协议 &nb ......

SQL Server 2005 T SQL cross Apply 与outer apply

SQL Server 2005 T-SQL Apply
透过执行计划可以看出,cross apply类似不带where条件的连接即cross join (交叉连接即笛卡尔积:返回行数为:前表符合条件的行乘上后表符合条件的行) 。形式上会灵活些.
使用 APPLY 运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数。表值函数作为右输入,外部表表达 ......

使用公用表表达式(CTE)简化嵌套SQL 和进行递归调用

1.使用CTE简化嵌套sql
   先看下面一个嵌套的查询语句:
select * from person.StateProvince where CountryRegionCode in 
         (select CountryRegionCode from person.CountryRegion where  ......

case when then...else end sql 语句用法

select f.AGENTID as 'ID',
          f.AGENTNAME as '姓名',
          f.COMNAME as '公司简称',
          c.REGISTDATE as '注册时间',
     ......

SQL Server中存储过程比直接运行SQL语句慢的原因

在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点:
1.       存储过程只在创造时进行编译即可,以后每次执行存储过程都不需再重新编译,而我们通常使用的SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.     &nbs ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号