以前都不習慣于總結,今天為了找一個簡單很的方法找了半天才找到了.今天先把它記錄下.
1:利用IDENTITY屬性和臨時表實現:
select a.*,IDENTITY(int, 1,1) AS number into #a from a_log a order by optime
select * from #a
2: 利用count()函數:
select a.*,序號=(select count(1)+1 from a_log where host_names=a.host_names and optime<a.optime)
From a_log a
select a.*,排名=(select count(1) from a_log where host_names=a.host_names and optime<=a.optime)
From a_log a
3 SQL 2005 可以利用Row_number()函數
select a.*,row_number()over(partition by host_names order by optime) as cn from a_log
備註:
select * From a_log
服務器名稱 應用程序名稱 執行時間
---------------------------------------------------------------------------------
RENY_PC SQL Query Analyzer 2009-08-27 13:41:06.903
RENY_PC 2009-08-27 13:43:56.903
RENY_PC 2009-08-27 13:44:19.437
想根據服務器名稱分組,根據執行時間的先後順序設置序號
方法1:不能根據服務器名稱分組,只按時間的先後順序進行設置序號字段
方法2: 利用了表與自身連接的特點,把一個表當做兩個表來看. 注意兩個語句之間的不同點,count(1)+1 時 用<號,count(1)時 用<=號
方法3: 直接利用sql 2005的分析函數.