ORDER IN GROUP 子句

ORDER IN GROUP 子句會與 group ON 語句 搭配使用,以群組傳回結果集。 ORDER IN GROUP 子句可讓您以不同的方式排序每個傳回的群組。 例如,如果您在 System.Kind 上分組,則可以依 System.Document.LastAuthor 排序所有檔、System.Music.AlbumArtist 的所有音樂檔案,以及 System.Message.FromName 的所有電子郵件。

語法

以下是 ORDER IN GROUP 子句的語法:

GROUP ON <group column and optional ranges>
OVER (SELECT ... FROM SystemIndex
    ORDER 
        IN GROUP '<group name>' BY <column> [<direction>] [,<column> [<direction>]]
        [IN GROUP '<group name>' BY <column> [<direction>] [,<column> [<direction>]] ]
        [BY <column> [<direction>] [,<column> [<direction>]] ])

組名規範是群組數據行的範圍或已知值,如 GROUP ON 語句中所指定。 例如,System.Photo.ISOSpeed 的已知值會包含 『ISO-100』、『ISO-200』等等。 System.Photo.DateTaken 的範圍包括 '2006-1-1' 和 '2007-1-1' ,例如 GROUP ON System.ItemDate ['2006-1-1', '2007-1-1']。

數據行規範必須是 GROUP ON 或 SELECT 語句中指定的有效數據行。 您可以包含多個數據行,並以逗號分隔。 例如,如果您在 System.Photo.ISOSpeed 上分組,您可以先依 System.Photo.ShutterSpeed 排序所有 ISO-100 相片,再依 System.Photo.Aperture 排序。

選擇性方向規範可以是 ASC 以遞增(低至高)或 DESC 來遞減(高至低)。 如果您未提供方向規範,則會使用預設的遞增。 如果您指定多個數據行,但未指定所有方向,則您指定的方向會套用至每個連續數據行,直到您明確變更方向為止。

ORDER GROUP IN 子句中未明確指定的範圍或值,會依 GROUP ON 資料行中的值以遞增順序排序。

例子

下列範例會依 System.Kind 屬性將結果分組。 查詢會依應用程式名稱和專輯標題和曲目號碼排序 『program』 群組和 『music』 群組。 NULL 群組會依項目名稱排序。 所有其他群組都會依專案日期排序。

GROUP ON System.Kind 
OVER (SELECT System.ItemUrl, System.Music.AlbumTitle, System.Music.TrackNumber, System.ItemName, System.ItemDate, System.Kind FROM SystemIndex
    ORDER 
        IN GROUP 'program' BY System.ApplicationName ASC
        IN GROUP 'music' BY System.Music.AlbumTitle ASC, System.Music.TrackNumber ASC
        IN GROUP NULL BY System.ItemName
        BY System.ItemDate DESC)

下列範例會依 System.ItemDate 屬性分組結果,然後依專案 URL、種類或名稱排序每個群組。

GROUP ON System.ItemDate ['2006-1-1', '2007-1-1', '2008-1-1'] 
OVER (SELECT System.ItemUrl, System.ItemName, System.ItemDate System.Kind FROM SystemIndex
    ORDER 
        IN GROUP MINVALUE BY System.ItemUrl ASC
        IN GROUP '2007-1-1' BY System.Kind
        IN GROUP NULL BY System.ItemName)

上述查詢的結果會以五個群組傳回,並依照下表所述排序。

群 描述 排序依據
MINVALUE 具有 2006-1-1 之前日期的專案 依專案的 URL 排序,依遞增順序排序
2006-1-1 日期在 2006-1-1 到 2007-1-1 之前的專案 依專案日期排序,依遞增順序排序
2007-1-1 日期在 2007-1-1 到 2008-1-1 之前的專案 依種類值排序,依遞增順序排序
2008-1-1 日期在 2008-1-1 之後的專案 依專案日期排序,依遞增順序排序
NULL System.ItemDate 資料行中沒有值的專案 依專案名稱排序,依遞增順序排序

 

參考

GROUP ON...多。。。語句

ORDER BY 子句