Sql Server API學習 SqlServer 排名函數 NTILE 表達式 COALESCE IIF CHOOSE 排名函數 NTILE 語法: NTILE (integer_expression) OVER ( [ <partition_by_clause> ] < order_by_cl
Sql Server API學習
SqlServer
排名函數
NTILE
語法:
NTILE (integer_expression) OVER ( [ <partition_by_clause> ] < order_by_clause > )
return: bigint
PS:如果總行數不能夠補integer_expression
整除,按照 OVER 子句指定的順序,較大的組排在較小的組前面。例如:53分為5組,則前3組為11行,後2組為10行。
將數量為integer_expression
的行分為一組,每一組具有各自的編號,組編號從1開始。
A:將行分為組
- SELECT p.FirstName, p.LastName
- ,NTILE(4) OVER(ORDER BY s.SalesYTD DESC) AS Quartile
- ,CONVERT(nvarchar(20),s.SalesYTD,1) AS SalesYTD
- ,a.PostalCode
- FROM Sales.SalesPerson AS s
- INNER JOIN Person.Person AS p
- ON s.BusinessEntityID = p.BusinessEntityID
- INNER JOIN Person.Address AS a
- on a.AddressID = p.BusinessEntityID
- WHERE TerritoryID IS NOT null
B:使用PARTITION BY劃分結果集
表達式
COALESCE
按順序計算變數並返回最先不為NULL的第一個表達式的當前值
COALESCE(expression,.......)
PS:如果所有的值都為NULL,則至少返回一個NULL
COALESCE 表達式是 CASE 表達式的語法快捷方式。 即查詢優化器將代碼 COALESCE(expression1,...n) 重寫為以下 CASE 表達式:
- END
簡單示例代碼:
- SELECT name, Class, Color, ProductNumber,
- COALESCE(Class,Color,ProductNumber) AS FirstNotNull
- FROM Production.Product
IIF
根據ture和false,計算不同的分支表達式
語法:
IIf(Logical_Expression, Expression1 [HINT ], Expression2 [HINT ])
IIf 函數有三個參數:iif(<條件>, <then 分支>, <else 分支>)
CHOOSE
在 SQL Server 中從值列表返回指定索引處的項。
語法:
CHOOSE ( index, val_1, val_2 [, val_n ] )
參數:
index
一個整數表達式,表示其後的項列表的從 1 開始的索引。如果提供的索引值具有 int 之外的數值數據類型,則該值將隱式轉換為整數。 如果索引值超出了值數組的界限,則 CHOOSE 返回 Null。
val_1 … val_n
任何數據類型的逗號分隔的值列表。
示例:
- SELECT CHOOSE(2,'test1','test2') AS result