martes, 21 de octubre de 2008

GROUPING

Indica si una expresión de columna especificada en una lista GROUP BY es agregada o no. GROUPING devuelve 1 para agregado y 0 para no agregado, en el conjunto de resultados. GROUPING sólo se puede usar en la lista de SELECT , cláusulas HAVING y ORDER BY cuando se especifica GROUP BY.

Sintaxis

GROUPING ( column_expression )

Argumentos

Es una columna o una expresión que contiene una columna en una cláusula GROUP BY.

Notas

GROUPING se utiliza para distinguir entre los valores NULL devueltos por ROLLUP, CUBE o GROUPING SETS y los valores NULL normales. El valor NULL devuelto como resultado de una operación ROLLUP, CUBE o GROUPING SETS es un uso especial de NULL.Actúa como marcador de posición de columna en el conjunto de resultados y significa "todos".

SELECT  TipoTransaccion,
         Divisa, 'Todas las Divisas'=GROUPING(Divisa), 
         SUM(Cantidad) Cantidad
         FROM Movimientos GROUP BY TipoTransaccion, Divisa 
         WITH CUBE
 
TipoTransaccion         Divisa         Todas las Divisas    Cantidad    
----------------------- -------------- -------------------- ----------- 
Entrada                 NULL           0                    2000
Entrada                 Dolar          0                    6200
Entrada                 Euro           0                    10600
Entrada                 Libra          0                    4500
Entrada                 Yen            0                    45000
Entrada                 NULL           1                    68300
Salida                  Dolar          0                    7000
Salida                  Libra          0                    1700
Salida                  Yen            0                    30000
Salida                  NULL           1                    38700
NULL                    NULL           1                    107000
NULL                    NULL           0                    2000
NULL                    Dolar          0                    13200
NULL                    Euro           0                    10600
NULL                    Libra          0                    6200
NULL                    Yen            0                    75000
(16 filas afectadas)
                 

Como se ve hay dos tipos de NULL en la columna de divisas. Las que corresponden al último registro que insertamos que tiene un NULL en divisa, y al que la función GROUPING le asocia un 0, y el NULL que podemos traducir por "Todas las divisas" al que la función GROUPING le asocia un 1.

No hay comentarios.: