如何讓SELECT 查詢結(jié)果額外增加自動遞增序號
創(chuàng)新互聯(lián)公司主營烏達(dá)網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app軟件定制開發(fā),烏達(dá)h5成都小程序開發(fā)搭建,烏達(dá)網(wǎng)站營銷推廣歡迎烏達(dá)等地區(qū)企業(yè)咨詢
如果數(shù)據(jù)表本身并不內(nèi)含自動遞增編號的字段時,要怎么做才能夠讓SELECT查詢結(jié)果額外增加自動遞增序號呢?下列五種方法供您參考:
USE test;
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
/* 方法四建立一個「自動編號」的字段,然后將數(shù)據(jù)新增至一個區(qū)域性暫存數(shù)據(jù)表,然后由該區(qū)域性暫存數(shù)據(jù)表中,將數(shù)據(jù)選取出來,最后刪除該區(qū)域性暫存數(shù)據(jù)表*/
SELECT 序號= IDENTITY(INT,1,1),管道,程序語言,講師,資歷 INTO #LiMing FROM 問券調(diào)查一;
GO
SELECT * FROM #LiMing;
GO
DROP TABLE #LiMing;
GO
/*方法五使用 SQL Server 2005 獨有的ROW_NUMBER() OVER () 語法搭配 CTE (一般數(shù)據(jù)表表達(dá)式,就是 WITH 那段語法)選取序號2 ~ 4 的數(shù)據(jù)*/
WITH
排序后的圖書 AS (SELECT ROW_NUMBER() OVER (ORDER BY 客戶編號 DESC) AS 序號,
客戶編號,公司名稱 FROM 客戶) SELECT * FROM 排序后的圖書 WHERE 序號 BETWEEN 2 AND 4;
GO
一種方式就是huyahuya09說的直接從表里按序取可用的,但是如果這么做當(dāng)數(shù)據(jù)量大時可能效率會比較低,建議增加一個廢號表,廢號表可以同時存儲名稱和序號,新增數(shù)據(jù)時首先檢查廢號表是否有記錄,有則使用,否則取原表序號最大號+1;這樣應(yīng)該同時也能解決問題補充的要求了
select row_number() over (order by 主鍵ID) as no,num1,num2,num1+num2
from 表名
order by 主鍵ID
通過rownum實現(xiàn)即可。
sql:select rownum , * from tablename where 條件語句。
解釋:rownum是隱藏的,查詢結(jié)果默認(rèn)從1開始編號,所以肯定會是自然編號的,有多少條,編號就到多少。
一、通過T-SQL代碼.
alter table 表名 add 列名 int IDENTITY(1,1) NOT NULL
這里用到了identity關(guān)鍵字:indentity(a,b),a b均為正整數(shù),a表示開始數(shù),b表示步長,indentity(1,1)就代表從1開始,每次增加1