星期五, 8月 16, 2013

[SQL] 次序函數應用 - identity()

identity() 可以說是 SQL SERVER 2000 的次序函數,identity() 搭配 SELECT INTO,可以對資料產生順序,但受限於 identity() 本身功能,其應用彈性較小,SQL Server 2005 開始提供的次序函數(ROW_NUMBER、RANK、DENSE_RANK 和 NTILE),提供更好的功能。
  • identity()
說明:搭配 SELECT INTO 語法,來將識別欄位插入新資料表中。
語法:IDENTITY (data_type [ , seed , increment ] ) AS column_name
  1. data_type:識別欄位資料類型
  2. seed:第一個資料列整數值,預設值為 1
  3. increment:後續資料列增加的整數值,預設值為 1
  4. column_name:欄位名稱
  • 簡易範例:列出業務人員接單數量,並根據其數量排序
-- 使用 AdventureWorks2012 
IF OBJECT_ID (N'ROWTable') IS NOT NULL
    DROP TABLE ROWTable

SELECT 
  IDENTITY(int,1,1) AS ROWNO , -- 從 1 開始,一次增加 1 來當成順序
  P.BusinessEntityID ,
  P.LastName ,
  P.FirstName ,
  T.SalesCount
  INTO ROWTable -- 產生 ROWTable
FROM [Person].[Person] AS P
  JOIN
    (
      SELECT 
        SalesPersonID , 
        COUNT(*) AS SalesCount
      FROM [Sales].[SalesOrderHeader]
      GROUP BY SalesPersonID
    ) AS T ON P.BusinessEntityID = T.SalesPersonID
ORDER BY SalesCount DESC -- 根據接單數量排序

-- 查詢產生順序結果 ROWTable
SELECT * FROM ROWTable
[SQL] 次序函數應用 - identity()

沒有留言:

張貼留言