Sql2005的新函数

SQL窗口函数详解
本文详细介绍了SQL中的row_number, rank, dense_rank及ntile等窗口函数的使用方法,并通过实例展示了这些函数如何进行数据排序与分组。同时,还探讨了pivot函数的应用场景。
row_number,rank,dense_rank,ntile,pivot
具体用法:
with  t_rowtable
 as
(
select cDealer_code,cDealer_Name,csales_code
,row_number() OVER (ORDER BY csales_code desc) AS cOper_codes
from tbl_dealer 
)
select * from  t_rowtable 
where cOper_codes between 1 and 2
查询结果:
cDealer_code cDealer_Name csales_code cOper_codes
00141 北京利达万顺汽车销售有限公司 8850 1
00349 北京陆地恒通经贸发展有限公司 8850 2
一句话分页:
select * from (
select cDealer_code,cDealer_Name,csales_code
,row_number() OVER (ORDER BY csales_code desc) AS cOper_codes from  tbl_dealer 
)  a
where  cOper_codes  between 1 and 2


with  t_rowtable
 as
(
select cDealer_code,cDealer_Name,csales_code
,rank() OVER (ORDER BY csales_code desc) AS cOper_codes
from tbl_dealer 
)
select * from  t_rowtable 
where cOper_codes between 1 and 14
查询结果:
cDealer_code cDealer_Name csales_code cOper_codes
00141 北京利达万顺汽车销售有限公司 8850 1
00349 北京陆地恒通经贸发展有限公司 8850 1
01488 sy_test1 8850 1
01909 111 8850 1
02005 999 8850 1
02010 222 8850 1
02066 华泰汽车销售有限公司 8850 1
02099 华扬联众广告公司(一汽大众) 8850 1
02100 福建新恒基广告公司 8850 1
02091 北京中广群星公关策划有限公司 8850 1
02145 博圣云峰广告有限公司 8850 1
02202 北京海辰恒业传媒广告有限公司 8850 1
02228 北京车闻公关咨询有限公司 8850 1
01450 广东汇港汽车有限公司 8844 14
01615 广东浩伟汽车发展有限公司 8844 14
00230 广州祥城汽车贸易有限公司 8844 14
00418 广东通达汽车贸易有限公司 8844 14

with  t_rowtable
 as
(
select cDealer_code,cDealer_Name,csales_code
,dense_rank() OVER (ORDER BY csales_code desc) AS cOper_codes
from tbl_dealer 
)
select * from  t_rowtable 
where cOper_codes between 1 and 2
查询结果:
cDealer_code cDealer_Name csales_code cOper_codes
00141 北京利达万顺汽车销售有限公司 8850 1
00349 北京陆地恒通经贸发展有限公司 8850 1
01488 sy_test1 8850 1
01909 111 8850 1
02005 999 8850 1
02010 222 8850 1
02066 华泰汽车销售有限公司 8850 1
02099 华扬联众广告公司(一汽大众) 8850 1
02100 福建新恒基广告公司 8850 1
02091 北京中广群星公关策划有限公司 8850 1
02145 博圣云峰广告有限公司 8850 1
02202 北京海辰恒业传媒广告有限公司 8850 1
02228 北京车闻公关咨询有限公司 8850 1
01450 广东汇港汽车有限公司 8844 2
01615 广东浩伟汽车发展有限公司 8844 2
00230 广州祥城汽车贸易有限公司 8844 2
00418 广东通达汽车贸易有限公司 8844 2

with  t_rowtable
 as
(
select cDealer_code,cDealer_Name,csales_code
,ntile(6990) OVER (ORDER BY csales_code desc) AS cOper_codes
from tbl_dealer 
)
select * from  t_rowtable 
where cOper_codes between 1 and 5
查询结果:
cDealer_code cDealer_Name csales_code cOper_codes
00141 北京利达万顺汽车销售有限公司 8850 1
00349 北京陆地恒通经贸发展有限公司 8850 1
01488 sy_test1 8850 2
01909 111 8850 2
02005 999 8850 3
02010 222 8850 3
02066 华泰汽车销售有限公司 8850 4
02099 华扬联众广告公司(一汽大众) 8850 4
02100 福建新恒基广告公司 8850 5
02091 北京中广群星公关策划有限公司 8850 5

privot用法:
declare @t table(name varchar(20))
insert @t
select 'abc' union all
select 'xxx' union all
select 'xxx' union all
select 'ttt'
;
with tt as(
select * from @t pivot(count(name) for name in([abc] ,[ttt],[xxx])) p)
select * from tt


参照此处学习之:
http://www.blogjava.net/nokiaguy/archive/2009/nokiaguy/archive/2008
/nokiaguy/archive/2009/02/21/255956.html


转载于:https://www.cnblogs.com/A-I/archive/2009/08/13/1545309.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值