T-SQL 語法備忘錄

T-SQL 語法備忘錄

1. COMPUTE 子句  (SQL 2012 起無此功能)

   在查詢結果集結尾來顯示計算結果。

   COMPUTE   FunctionType(Expression)  [By Expression]

   Function Type :

  • AVG         取平均值
  • COUNT    計數
  • MAX        取最大值
  • MIN         取最小值
  • STDEV     取標準差
  • STDEVP   取擴展標準差
  • SUM         總計
  • VAR         取變異數
  • VARP       取擴展變異數

 

2. GROUP BY 子句

    Group By  expression | Group By  [ROLLUP | CUBE | GROUPING SETS]  (expression)

  • ROLLUP  產生彙總資料列,小計或超彙總資料列以及總計。
  • CUBE  產生簡單的彙總資料列,ROLLUP 超彙總資料列和跨表格式資料列。
  • GROUPING SETS   在一個查詢中指定多組資料。 只有指定的群組才會彙總,而不是 CUBE 或 ROLLUP 產生的一組完整彙總。

    HAVING  <condition>  搭配 GROUP BY 子句來使用,用來篩選 GROUP 彙整後的資料。

 

3. ORDER BY 子句

    Order By  expression  [ASC | DESC]  [Offset_Fetch]

  • Offset_Fetch

          OFFSET n  ROWS   [FETCH  FIRST | NEXT   n   ROWS   ONLY

    依據指定的資料行清單排序查詢的結果集,並選擇性地將傳回的資料列限制在指定範圍內。

    例如略過 5 個資料列,再傳回下 15 個資料列,Offset  5  ROWS  FETCH  NEXT  15  ROWS  ONLY

    這個功能可以做為擷取分頁資料的功臣。也就是說如果抓取的資料數有 5000 筆時,當然可以載入到 DataTable 中讓 DataGridView (WinForm) 或是 GridView (WabForm) 來處理。

    但要是資料有10萬筆,那麼將會消耗大量的記憶體,所以可以透過這個方式,來抓取指定筆數的資料。

 

4. ROW_NUMBER 語法

   ROW_NUMBER( )  OVER  ( [PARTITION BY expression] ORDER BY expression )

  • PARTITION BY : 依指定條件來分割結果集。

   產生每個分割的序號列,序號自 1 開始。

 

 

5. OVER 子句

    OVER ( [PARTITION BY expression] ORDER BY expression )

  • PARTITION BY : 依指定條件來分割結果集。

  在套用其他函數前,來決定資料列集的分割與排序。例如搭配 ROW_NUMBER 來使用,或是搭配 SUM 等等。

 

6. RANK 語法

    RANK( )  OVER ( [PARTITION BY expression] ORDER BY expression )

  • PARTITION BY : 依指定條件來分割結果集。

   依指定條件分割資料集,再依照排序設定來產生排名次序。當有出現相同的排名後,則會產生非連續的名次編號。

   例如排名中有兩筆並列第 3 時,就不會有第 4 的名次,而是直接跳到第 5 的名次。如果要有連續的名次,同時又允許有併列的名次,則必需要使用 DENSE_RANK。


程式是運氣與直覺堆砌而成的奇蹟。
若不具備這兩者,不可能以這樣的工時實現這樣的規格。
修改規格是對奇蹟吐槽的褻瀆行為。
而追加修改則是相信奇蹟還會重現的魯莽行動。