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]
