GROUPING 分组

函数 GROUPING 一般和操作符 ROLLUP 或 CUBE 一同使用，它可以使你区分结果集中的细节数据和汇总数据。使用 GROUPING 函数能够帮助你识别结果集中的空值 是表中本来就有的空值，还是由操作符 ROLLUP 或 CUBE 创建的含有汇总值的新记录。

在使用函数 GROUPING 时，应注意以下事项：

SQLServer 将为 GROUPING 函数指定的字段创建一个新字段；

如果 SQLServer 返回 1，代表结果集中的这个记录是由ROLLUP 或 CUBE创建的含有汇总值的记录；

SQLServer 返回 0，代表这条记录本来就存在于数据库的表中；

出现在 GROUPING 函数中的字段也必须出现在 GROUP BY 子句中；

GROUPING 函数能够用编程方式引用你的结果集。

## GROUPING

是一个聚合函数,它产生一个附加的列，当用 CUBE 或 ROLLUP 运算符添加行时，附加的列输出值为1，当所添加的行不是由 CUBE 或 ROLLUP 产生时，附加列值为0。

仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相联系的选择列表中才允许分组。

语法

GROUPING ( column_name )

参数

column_name

是 GROUP BY 子句中用于检查 CUBE 或 ROLLUP 空值的列。

返回类型

int

注释

分组用于区分由 CUBE 和 ROLLUP 返回的空值和标准的空值。作为CUBE 或 ROLLUP 操作结果返回的 NULL 是 NULL 的特殊应用。它在结果集内作为列的占位符，意思是"全体"。

示例

下面的示例将 royalty 的数值分组，并聚合 advance 的数值。GROUPING 函数应用于 royalty 列。

USE pubs

SELECT royalty, SUM(advance) 'total advance',

GROUPING(royalty) 'grp'

FROM titles

GROUP BY royalty WITH ROLLUP

结果集在 royalty 下显示两个空值。第一个 NULL 代表从表中这一列得到的空值组。第二个 NULL 在 ROLLUP 操作所添加的汇总行中。汇总行显示的是所有 royalty 组的 advance 合计数值，并且在 grp 列中用 1 标识。

下面是结果集：

royalty total advance grp

--------- --------------------- ---

NULL NULL 0

10 57000.0000 0

12 2275.0000 0

14 4000.0000 0

16 7000.0000 0

24 25125.0000 0

NULL 95400.0000 1