Considere que o seguinte código PL/SQL fora executado em um banco de dados Oracle 11g:
DROP TABLE tabela1;
CREATE TABLE tabela1 (
fato_1_id NUMBER NOT NULL,
fato_2_id NUMBER NOT NULL,
fato_3_id NUMBER NOT NULL,
fato_4_id NUMBER NOT NULL,
valor_vendas NUMBER(10,2) NOT NULL
);
INSERT INTO tabela1
SELECT TRUNC(DBMS_RANDOM.value(low => 1,
high => 3)) AS fato_1_id,
TRUNC(DBMS_RANDOM.value(low => 1,
high => 6)) AS fato_2_id,
TRUNC(DBMS_RANDOM.value(low => 1,
high => 11)) AS fato_3_id,
TRUNC(DBMS_RANDOM.value(low => 1,
high => 11)) AS fato_4_id,
ROUND(DBMS_RANDOM.value(low => 1,
high => 100), 2) AS valor_vendas
FROM dual
CONNECT BY level <= 1000;
COMMIT;
Considere a seguinte consulta:
SELECT fato_1_id,
fato_2_id,
SUM(valor_vendas) AS valor_vendas
FROM tabela1
GROUP BY CUBE (fato_1_id, fato_2_id)
ORDER BY fato_1_id, fato_2_id;
A quantidade de registros que esta query retorna é: