当 GROUP BY 操作的输入中的行包含 NULL 时,可能会将由 ROLLUP、CUBE 或 GROUPING SETS 操作添加的小计行与包含的 NULL 值属于原始输入数据的行混淆。
GROUPING 函数通过以下方法将小计行与其它行区分开:采用分组依据列表中的列作为它的参数,并在该列为 NULL 时(因为行是小计行)返回 1,在该列不为 NULL 时返回 0。
下面的示例在结果集中包括 GROUPING 列。输入数据包含 NULL 的结果行被突出显示,小计行则没有。GROUPING 列会突出显示。查询是 employee 表和 sales_order 表之间的外连接。查询选择居住在德克萨斯、纽约或加利福尼亚的女雇员。NULL 会显示在与不是销售代表(因而没有销售额)的那些女雇员相对应的列中。
SELECT employee.emp_id AS Employee,
year(order_date) AS Year,
COUNT(*) AS Orders,
GROUPING ( Employee ) AS GE,
GROUPING ( Year ) AS GY
FROM employee LEFT OUTER JOIN sales_order
ON employee.emp_id = sales_order.sales_rep
WHERE employee.sex IN ('F')
AND employee.state IN ('TX', 'CA', 'NY')
GROUP BY ROLLUP (Year, Employee)
ORDER BY Year, Employee下面的表是查询的结果集。
SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。