好贷网好贷款

2005的几个新函数 0

发布时间:2016-12-5 10:31:10 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"2005的几个新函数 0",主要涉及到2005的几个新函数 0方面的内容,对于2005的几个新函数 0感兴趣的同学可以参考一下。

一 排序函数 row_number() +1递增返回行号 dense_rank() 同数量等级的数据返回相同名次,下级数量等级的排名为上级数量等级的排名+1 rank() 同数量等级的数据返回相同名次,下级数量等级的排名为上级所有数据总数+1 语法 function_name() OVER ( [ <partition_by_clause> ] <order_by_clause> ) CREATE TABLE employee (depart_name varchar(10),work_no varchar(6),salary int ) depart_name work_no     salary 财务部     200001 2000 财务部     200002 2500 财务部     200004 2500 发展部     300002 2000 发展部     300009 1800 发展部     300014 2000 综合部     400001 1800 综合部     400005 2000 综合部     400009 2500 技术部     500008 2500 技术部     500099 1800 技术部     500102 2700 --按工资从低到高排名 SELECT row_number() OVER (ORDER BY salary ) as id, dense_rank() OVER (ORDER BY salary desc) as 工资排名1, rank() OVER (ORDER BY salary desc) as 工资排名2, * FROM employee ID  工资排名1 工资排名2 部门名   工号   工资 1 1 1 发展部 300009 1800 2 1 1 综合部 400001 1800 3 1 1 技术部 500099 1800 4 2 4 发展部 300002 2000 5 2 4 综合部 400005 2000 6 2 4 发展部 300014 2000 7 2 4 财务部 200001 2000 8 3 8 财务部 200002 2500 9 3 8 财务部 200004 2500 10 3 8 综合部 400009 2500 11 3 8 技术部 500008 2500 12 4 12 技术部 500102 2700 --分部门按工资从低到高排名 SELECT row_number() OVER (PARTITION BY depart_name ORDER BY salary ) as 工资排名, * FROM employee 工资排名  部门名        工号    工资 1   财务部 200001 2000 2   财务部 200002 2500 3   财务部 200004 2500 ------------------- 1   发展部 300009 1800 2   发展部 300014 2000 3   发展部 300002 2000 ------------------- 1   技术部 500099 1800 2   技术部 500008 2500 3   技术部 500102 2700 ------------------- 1   综合部 400001 1800 2   综合部 400005 2000 3   综合部 400009 2500 二  行列转换 CREATE TABLE E_money (work_no varchar(6),moeny_type varchar(10),num int ) work_no money_type num 100001 HKD    100 100001 HKD    200 100001 USD    300 200020 HKD    50 200020 RMB    5000 200020 USD    500 400078 HKD    80 400078 HKD    90 400078 RMB    800 400078 RMB    900 400078 USD    90 400078 USD    800 --统计每个员工不同币种拥有数 work_no 港币    美元    人民币 100001 300 300 50 200020 50 500 5000 400078 170 890 1700 --sql 2000写法 select work_no, sum(case when moeny_type='HKD' then num else 0 end) as 港币, sum(case when moeny_type='USD' then num else 0 end) as 美元, sum(case when moeny_type='RMB' then num else 0 end) as 人民币 from e_money  group by work_no --2005新增函数 SELECT work_no,[HKD] as 港币,[USD] as 美元,[RMB] as 人民币 FROM e_money PIVOT( SUM(num)  FOR moeny_type IN ([HKD],[USD],[RMB]) ) AS pvt

2005看来真的不错啊。

不错,看来sql server 也开始引入了oracle 的分析函数了,分析函数真是好东西

嗯,谢谢提供宝贵材料

收藏~~~~~~~

--谢谢黑哥!:D

借问小黑 PIVOT 不能直接实现动态列吧?

好东东,就要顶!谢谢楼主!

小黑,厉害:-)

先收着,谢了:)

先占地方,2005beta3大上个星期到的,现在还没时间看呢,5555~~~

问一下,就是申请的那个2005beta3光盘里有相关的学习资料么?! 如果没有,在哪可以找到2005的学习资料~

PIVOT 不能直接实现动态列吧? 有点象ACCESS的交叉报表写法

学习ING.........

上面的那些功能真的很需要

:0

学习!

顶~~~~~!!

顶~~~~~!!

那光盘里有一些视频文件和pdf文档,不过都是鸟文的

学习学习……最后的AS pvt有什么用,还是函数规定的?

收藏

:)

又学oracle的功能啊...

xue xi

xuexi 

haha,oracle 几年前就有的功能, 看来sql 与oracle 的差距得10-15年以上

收藏

学习了

我喜欢这些

多谢啦很多用

good

学习

MARK先

好牛啊

mark

学习收藏中......

PIVOT 不能直接实现动态列吧? 在 --2005新增函数 SELECT work_no,[HKD] as 港币,[USD] as 美元,[RMB] as 人民币 FROM e_money PIVOT( SUM(num)  FOR moeny_type IN ([HKD],[USD],[RMB]) ) AS pvt 中的IN子句只能写死,连想写成一个子查询都不支持!!!!强烈抗议! 这样就只能解决固定列数的行转列问题,而不固定列数的行转列可能还是只有靠动态SQL来解决。

支持for循环了没有

狂强啊,可以行列转换,嘿嘿 mark!

学习

^_^

不支持动态列的行转列!那这个函数也就没什么的实际的意义了。 到最后还是要动态SQL来解决。 郁闷!

学习!

上一篇:关于sql server 2005升级问题 30spsaint]
下一篇:怎么解决集成reporting service时的身份验证问题,顶贴有分,解决了问题再开帖给500百分,觉得少的话还可以加,反正分还不少:) 100Poseidon2]

相关文章

相关评论