• SQL server 2005中新增的排序函数及应用


    先来个例子

    SELECT 
        
    YEAR(BirthDate),
        ROW_NUMBER() 
    OVER(ORDER BY YEAR(BirthDate)) AS 'RowNumber',/* 按年产生一个唯一的序号 */
        ROW_NUMBER() 
    OVER(PARTITION BY YEAR(BirthDate) ORDER BY BirthDate) AS RowNumberPartition, /* 每年产生一个唯一的序列 */
        RANK() 
    OVER(ORDER BY YEAR(BirthDate)) AS 'Rank'/* 产生一个非紧密排名 */
        DENSE_RANK() 
    OVER(ORDER BY YEAR(BirthDate)) AS 'Dense_Rank'/* 产生一个紧密排名 */
        NTILE(
    10OVER(ORDER BY BirthDate DESCAS 'ntile' /* 将结果分成10个组 */
    FROM HumanResources.Employee
    ORDER BY BirthDate

    看看新的排序函数如何解决SQL server 2000中不方便解决的问题
    --按BirthDate排序,取第10条到20条的数据 (这一定是最激动人心的新特性,哈哈)
    SELECT BirthDate FROM 
    (
        
    SELECT
            ROW_NUMBER() 
    OVER(ORDER BY BirthDate) AS a,BirthDate
        
    FROM HumanResources.Employee
    AS a
    WHERE a BETWEEN 10 AND 20

    --将数据分成十份,取第三份
    SELECT
        BirthDate
    FROM
    (
    SELECT 
        NTILE(
    10OVER(ORDER BY BirthDate DESCAS a,BirthDate
    FROM HumanResources.Employee
    AS a
    WHERE a = 3
    再来看看如何用新的排序函数解决以前在SQL server 2000中的问题
    -- 出生的员工最多的一年出生多少员工(有点)
    /*
     SQL server 2000 */
    SELECT MAX(a)
    FROM
    (
    SELECT COUNT(EmployeeID) AS a FROM HumanResources.Employee GROUP BY YEAR(BirthDate)
    AS a

    /* SQL server 2005  */
    SELECT MAX(a)
    FROM
    (
    SELECT 
        ROW_NUMBER() 
    OVER(PARTITION BY YEAR(BirthDate) ORDER BY BirthDate) AS a
    FROM HumanResources.Employee
    AS a

    -- 出生日期涵盖了多少年
    /*
     SQL server 2000  */
    SELECT COUNT(DISTINCT YEAR(BirthDate)) FROM HumanResources.Employee

    /* SQL server 2005 */
    SELECT MAX(a)
    FROM
    (
    SELECT 
        DENSE_RANK() 
    OVER(ORDER BY YEAR(BirthDate)) AS a
    FROM HumanResources.Employee
    AS a

    -- 显示前10%的数据
    /*
     SQL server 2000  */
    SELECT TOP 10 Percent BirthDate FROM HumanResources.Employee

    /* SQL server 2005  */
    SELECT
        BirthDate
    FROM
    (
    SELECT 
        NTILE(
    10OVER(ORDER BY BirthDate DESCAS a,BirthDate
    FROM HumanResources.Employee
    AS a
    WHERE a = 1



    你还能想出什么用处呢?
  • 相关阅读:
    《C语言》for语句(8)
    解决vue vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in nextTick: “TypeError: Cannot convert undefine
    React中WebSocket使用以及服务端崩溃重连
    React Native 中 react-navigation 导航器的使用 [亲测可用]
    ueditor 修改内容方法报错no funtion解决方式
    nodeJs与elementUI实现多图片上传
    Vue多页面开发案例
    Vue.js Cli 3.0 多页面开发案例解析
    基于node.js 微信支付notify_url回调接收不到xml
    react-image-gallery 加入视频图片混合显示
  • 原文地址:https://www.cnblogs.com/goodspeed/p/270837.html
Copyright © 2020-2023  润新知