JBOSS 點滴

          豐豐的博客

          sql server2005新特性

          sql server2005新特性
          先來個例子

          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

          posted on 2007-04-11 11:23 半導體 閱讀(163) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 揭东县| 沙雅县| 马公市| 兴海县| 嘉黎县| 柯坪县| 丹东市| 新丰县| 于田县| 鄂托克前旗| 清流县| 宿松县| 玉山县| 巴彦县| 平阴县| 泰兴市| 通辽市| 高碑店市| 久治县| 新兴县| 方正县| 白水县| 乐安县| 乌拉特前旗| 公主岭市| 靖州| 湘乡市| 姜堰市| 新田县| 周宁县| 武胜县| 阜平县| 濉溪县| 泸西县| 枣强县| 怀柔区| 金山区| 北票市| 龙南县| 沛县| 三河市|