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 和 System.Photo.Aperture 对所有 ISO-100 照片进行排序。

可选方向说明符可以是 ASC,用于升序(低到高)或 DESC,用于降序(高到低)。 如果未提供方向说明符,则使用默认的升序。 如果指定了多个列,但未指定所有方向,则指定的方向将应用于每个连续列,直到显式更改方向。

ORDER GROUP IN 子句中未显式指定的范围或值按 GROUP ON 列中的值按升序排序。

例子

以下示例按 System.Kind 属性对结果进行分组。 查询将按应用程序名称和“music”组按专辑标题和曲目编号对“program”组进行排序。 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 子句