圖表1
如果資料表本身並不內含自動地增編號的欄位時,要怎麼作,才能夠讓 SELECT 查詢結果如圖表 1 所示地額外增加自動遞增序號呢?我們提供下列五種方法供您參考:
USE 北風貿易 ;
GO
/* 方法一 */
SELECT 序號 = ( SELECT COUNT ( 客戶編號 ) FROM 客戶 AS LiMing
WHERE LiMing . 客戶編號 <= Chang . 客戶編號 ),
客戶編號 , 公司名稱
FROM 客戶 AS
Chang ORDER BY 1 ;
GO
/* 方法二 : 使用 SQL Server 2005 獨有的 RANK() OVER () 語法 */
SELECT RANK() OVER (ORDER BY 客戶編號 DESC) AS 序號 ,
客戶編號 , 公司名稱
FROM 客戶 ;
GO
/* 方法三 */
SELECT 序號
= COUNT (*), LiMing . 客戶編號 , LiMing . 公司名稱
FROM 客戶 AS LiMing , 客戶 AS Chang
WHERE LiMing . 客戶編號 >= Chang . 客戶編號
GROUP BY LiMing . 客戶編號 , LiMing . 公司名稱
ORDER BY 序號
;
GO
/* 方法四
建立一個「自動編號」的欄位,然後將資料新增至一個區域性暫存資料表,
然後由該區域性暫存資料表中,將資料選取出來,最後刪除該區域性暫存資料表
*/
SELECT 序號 = IDENTITY(INT,1,1) , 管道 , 程式語言 , 講師 , 資歷
INTO #LiMing
FROM 問券調查一 ;
GO
SELECT * FROM #LiMing ;
GO
DROP TABLE #LiMing ;
GO
/*
方法五
使用 SQL Server 2005 獨有的 ROW_NUMBER() OVER () 語法
搭配 CTE (一般資料表運算式,就是 WITH 那段語法)選取序號 2 ~ 4 的資料
*/
WITH 排序後的圖書 AS
( SELECT ROW_NUMBER () OVER ( ORDER BY 客戶編號
DESC ) AS 序號 ,
客戶編號 , 公司名稱
FROM 客戶 )
SELECT * FROM 排序後的圖書
WHERE 序號 BETWEEN 2 AND 4 ;
GO