群組開啟...多。。。陳述
The GROUP ON...多。。。語句會傳回階層式數據列集,其中搜尋結果會根據指定的數據行和選擇性群組範圍分割成群組。 如果您在 System.Kind 數據行上分組,結果集會分成多個群組:一個用於檔、一個用於通訊等等。 如果您在 system.Size 和群組範圍 100 KB 上分組,結果集會分成三個群組:大小 < 100 KB 的專案、大小 >= 100 KB 的專案,以及沒有大小值的專案。 您也可以使用函式來匯總群組。
本主題涵蓋下列主題:
語法
GROUP ON ...多。。。語句具有下列語法:
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 NULL: Size 沒有值 |
System.Author [BEFORE('m'),AFTER('r')] | 結果分成四個貯體:MINVALUE: 作者在 “m” 之前 < 字元 m:在 “m” <= 在 “r” 後面撰寫 < 字元之前 字元 r:在 “r” <= Author 之後 字元 NULL: 作者沒有值 |
System.Author [MINVALUE/'a to l',“m”/'m to z'] | 結果分成三個貯體:至 l: Author < “m” m 到 z: “m” <= Author NULL: 作者沒有值 |
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 NULL: 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 |
知更鳥 | dolor.docx | |
Y | Zara | amet.docx |
[其他] | Abner | nonummy.docx |
鮑勃 | 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.Artist排序檔。
如需排序結果的詳細資訊,請參閱 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'))))
相關主題