共用方式為


GROUP ON ...OVER ...聲明

群組開啟...OVER...語句會傳回階層式資料列集,其中搜尋結果會根據指定的資料行和選擇性群組範圍分割成群組。 如果您在 System.Kind 資料行上分組,結果集會分成多個群組:一個用於檔、一個用於通訊等等。 如果您在 System.Size 和群組範圍 100 KB 上分組,結果集會分成三個群組:大小 < 為 100 KB 的專案、大小 > 為 = 100 KB 的專案,以及沒有大小值的專案。 您也可以使用函式匯總群組。

本主題涵蓋下列主題:

Syntax

GROUP ON ...OVER ...語句具有下列語法:

GROUP ON <column> ['['<group ranges>']']] 
[AGGREGATE <aggregate_function>] 
[ORDER BY <column> [<direction>]] | [ORDER IN GROUP '<group name>' BY <column> [<direction>]]
    OVER (GROUP ON... | SELECT... ] )

其中群組範圍的定義如下:

<group ranges> := <range limit> [/'<label>'] | <range limit> [/'<label>'], <group ranges>
<range limit> := (<number> | <date> | '<string>' | BEFORE('<string>') | AFTER('<string>')) 

GROUP ON < 資料行 > 可以是屬性存放區中屬性的一般或分隔 識別碼

選擇性 < 群組範圍 > 是一或多個值的清單, (數位、日期或字串) 用於將結果分割成群組。 範圍 < 限制 > 會識別傳回結果集中的除點,並

第一個結果群組包含指定屬性的最小可能值的專案,最多可包含第一個範圍限制。 此群組可以使用 MINVALUE 關鍵字來參考。 第二個群組可以使用範圍限制規範本身來參考,並包含指定屬性的值等於或大於範圍限制的專案。 任何沒有指定屬性值的專案都會最後傳回,而且可以使用 Null 關鍵字來參考。

例如, System.DateCreated 屬性的範圍限制為 '2006-01-01' 會將結果集分割成具有 2006-01-01 之前日期的專案, (MINVALUE 群組) , 日期在 2006-01-01 之後的專案 (2006-01-01 群組) ,以及沒有日期的專案 (Null 群組) 。

在每個群組中,結果預設會依 GROUP ON 資料行中的值排序。 選擇性 ORDER BY 子句可以包含 ASC 的方向規範,以遞增 (低到高) ,或 DESC 將 (高到低) 遞減,而 ORDER IN GROUP BY 子句可以使用不同的規則來排序每個群組。 如需詳細資訊,請參閱下面的 排序群組 一節。

群組範圍

下表示范如何根據範圍限制將結果分成群組:

(< 資料行 > [群組範圍]) 範例 結果
System.Size [1000, 5000] 結果會分組為四個貯體: MINVALUE:大小 < 1000
1000: 1000 < = 大小 < 5000
5000: 大小 > = 5000
空: Size 沒有值
System.Author [BEFORE ('m'm') ,AFTER ('r') ] 結果會分組為四個貯體: MINVALUE: 在 「m」 之前撰寫 < 字元
m: 「m」 之前的字元 = 在 「r」 < 之後撰寫 < 字元
r: 「r」 之後的 < 字元 = Author
空: 作者沒有值
System.Author [MINVALUE/'a to l',「m」/'m to z'] 結果分成三個貯體: a 到 l: 作者 < 「m」
m 到 z: 「m」 < = Author
空: 作者沒有值
System.DateCreated ['2005-1-01','2006-6-01'] 結果會分組為四個貯體:
MINVALUE: DateCreated < 2005-1-01
2005-1-01: 2005-1-01 < = DateCreated < 2006-6-01
2006-1-01: DateCreated > = 2006-6-01
空: DateCreated 沒有值

 

 

重要

錯誤: GROUP ON System.Author['m','z','a']

正確: GROUP ON System.Author['a','m','z']

 

 

標籤群組

若要改善可讀性,您可以使用下列語法來標記群組:

GROUP ON <column> [<range limit>/'<label>',<range limit>/'<label>']

標籤會與具有斜線標記的範圍限制分開,並以單引號括住。 如果您未指定標籤,組名就是範圍限制字串。

以下是標籤群組的範例:

GROUP ON System.Size [(MINVALUE/'Small','100')/'Medium','50000'/'Large']
    OVER (SELECT System.Size FROM SystemIndex)

在 Windows 7 或更新版本中,您也可以使用泛型 [OTHER] 標籤來結合多個群組範圍。 使用此標籤識別的所有群組結果都會合並成一個群組與這個標籤。 除了 Null 群組以外的所有其他群組之後,會傳回此結果群組。 Null群組包含沒有指定屬性值的專案結果。 在 Windows 7 之前,[其他] 標籤會被視為任何其他群組標籤。

下列程式碼是針對在 Windows 7 或更新版本中建立的群組使用 [OTHER] 標籤的範例:

GROUP ON System.Author ['0', 'A'/'[OTHER]', 'I', 'Q', 'W'/'[OTHER]', 'Y']
    OVER (SELECT System.DateCreated FROM SystemIndex)

下表顯示 Windows 7 或更新版本中上述群組程式碼所建立的群組。

群組 System.Author System.FileName
0 1Bill Lorem.docx
Q 女王 Ipsum.docx
Robin dolor.docx
Y Zara amet.docx
[其他] Abner nonummy.docx
Bob laoreet.docx
Xaria magna.docx
NULL aliquam.docx

 

排序群組

有三種方式可以排序群組中的專案:

  • 預設排序:如果您未指定其他順序,結果會依 GROUP ON 資料行中的值排序,並以遞增順序排序。
  • ORDER BY:您可以在 ORDER BY 子句中指定遞減順序。 您必須依 GROUP ON 資料行排序結果。
  • ORDER IN GROUP BY:您可以為每個群組指定不同的順序。 如果您在System.Kind上分組,您可以依System.Author 和 System.Music.Music排序檔。

如需排序結果的詳細資訊,請參閱 ORDER BY 子句ORDER IN GROUP 子句 參考頁面。

巢狀群組

您可以使用多個 GROUP ON 子句來巢狀群組。 查詢中指定的順序會直接反映在輸出群組階層中,如下列範例所示。

GROUP ON <System.Kind> 
      OVER (GROUP ON <System.Author> 
                  OVER (SELECT <System.DateCreated>))
System.Kind System.Author System.DateCreated
文件 威拉 2006-01-02
2006-01-05
Zara 2007-06-02
2007-09-10
通訊 Abner 2006-04-16
2007-02-20
威拉 2006-10-15
Zara 2008-01-02

 

 

在向量屬性上分組

根據向量屬性分組,可以同時包含一或多個值的屬性,預設會個別比較向量值。 例如,如果有一份檔,Lorem.docx System.Author 屬性為 「Theresa;Zara「 和另一份檔Ipsum.docx,且 System.Author 屬性為 」Zara「,查詢會以兩個群組傳回結果集,如下所示:

GROUP ON <System.Author> 
      OVER (SELECT <System.FileName>)
System.Author System.FileName
德蕾莎 Lorem.docx
Zara Lorem.docx
  Ipsum.docx

 

如您所見,在向量屬性上分組會傳回重複的資料列。 Lorem.docx出現兩次,因為它有兩位作者。

 

更多範例

GROUP ON System.Photo.ISOSpeed [0,10,100] 
      OVER (SELECT System.ItemName, System.Size, System.ItemUrl FROM SystemIndex)
            
GROUP ON System.DateCreated['2005/01/01 00:00:00', '2005/12/30 23:00:00'] 
      OVER (SELECT System.ItemName, System.Size, System.ItemUrl FROM SystemIndex)
            
GROUP ON System.Author ORDER BY System.Author DESC 
      OVER (GROUP ON System.DateCreated ORDER BY System.DateCreated ASC 
                  OVER (SELECT System.FileName, System.DateCreated, System.Size FROM SystemIndex 
                        WHERE CONTAINS(*, 'text')))

GROUP ON System.ItemName [before('a'), 'a', before ('c'), 'd', after('d')] 
      OVER (SELECT System.ItemName, System.ItemUrl FROM SystemIndex ORDER BY System.ItemName)                        
                        
GROUP ON System.ItemNameDisplay ['a' / 'col_a','c' / 'col_c'] 
      OVER (SELECT System.ItemNameDisplay FROM SystemIndex 
            ORDER BY System.ItemNameDisplay)

GROUP ON System.Size[1,2] 
      OVER (GROUP ON System.Author['a','f','mc','x'] 
                  OVER (GROUP ON System.DateCreated['2005/07/25 07:00:00', '2005/08/25 07:00:00']
                        ORDER BY System.DateCreated DESC 
                              OVER (SELECT System.FileName FROM SystemIndex 
                                    WHERE CONTAINS('text'))))   

彙總函式

ORDER BY 子句

ORDER IN GROUP 子句