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 列中的一个范围或已知值,如 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 属性对结果进行分组。 查询将按应用程序名称对“程序”组进行排序,并按专辑标题和曲目编号对“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)

上述查询的结果将按五个组返回,并按下表所述进行排序。

Group 说明 排序依据
MINVALUE 日期早于 2006-1-1 的项目 按项的 URL 按升序排序
2006-1-1 日期在 2006-1-1-1 之后但 2007-1-1 之前的项目 按项目日期按升序排序
2007-1-1 日期在 2007-1-1-1 但 2008-1-1 之前的项目 按种类值排序,升序
2008-1-1 日期在 2008-1-1 或之后的项目 按项目日期按升序排序
NULL System.ItemDate 列中没有值的项 按项名称按升序排序

 

参考

GROUP ON...OVER...声明

ORDER BY 子句