2007.07.31

ROW_NUMBER 実験してみました

SQL Server2005 から利用できるようになった「ROW_NUMBER」について実験してみました。
OVER(ORDER BY ~)で指定する列名は、テーブルに元から存在するフィールドを指定しないとエラーとなります
SELECTの列リスト内で別名を付けたとしても、OVER句内の並べ替えはその前に行われているようです

 エラーになってしまう例(入社年月日、又は登録日の順に並べ替えて連番を振る)

SELECT ROW_NUMBER() OVER(ORDER BY [日付]) AS [連番]
              ,[従業員No] ,[姓] ,[名]
              ,ISNULL([入社年月日], [登録日]) AS [日付]
   FROM [従業員マスタ]
› メッセージ 207、レベル 16、状態 1、行 1 列名 '日付' は無効です。

今回の場合、以下のようにしてエラーを回避しました

SELECT ROW_NUMBER() OVER(ORDER BY [日付]) AS [連番]
              ,[従業員No] ,[姓] ,[名]
              ,[日付]
   FROM ( 
              SELECT
                        [従業員No] ,[姓] ,[名]
                        ,ISNULL([入社年月日], [登録日]) AS [日付]
                 FROM [従業員マスタ]
       ) AS [WORKTABLE]

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
sunohara