ROLLUP é uma função que permite uma instrução Select calcule vários níveis de subtotais através de um grupo especificado (Função que totaliza a função de Group). Está função calcula também um total geral. Rollup é uma extensão simples para a cláusula Group by, sua sintaxe é extremamente fácil de usar. Não podemos esquecer-nos de pensar em eficiência, a função é altamente eficiente, acrescentando sobrecarga mínima para uma consulta.

Quando usar o Rollup?

Usa a Função Rollup em SQL que envolvem subtotais. É muito útil para totalizar datas, cadastros e suas movimentações, entre outros.

Rollup Syntax



  SELECT Campo01, Campo02, sum(Campo03) 
    FROM TableName 
   GROUP BY ROLLUP(Campo01, Campo02)

Abaixo iremos explicar como faremos e como identificar que precisaremos utilizar a função, pois muitas vezes deixamos esta função para o relatório ou mesmo para a tela do programa.

Exemplo:

Tenho uma tabela e preciso que a mesma me traga o total de pesagens por data e bloco totalizando a quantidade de peso. Antes da dica faria um select unia com outro select conforme o exemplo abaixo.



SELECT *
FROM
(
    SELECT DT_MOV, COD_BLOCO, SUM(PESO_BRUTO - PESO_TARA) PESO
      FROM OS_PESAGENS
     WHERE COD_EMPRESA = 1
       AND SAFRA       = 2011        
    GROUP BY DT_MOV, COD_BLOCO   
    UNION
    SELECT DT_MOV, 99999999 COD_BLOCO, SUM(PESO_BRUTO - PESO_TARA) PESO
      FROM OS_PESAGENS
     WHERE COD_EMPRESA = 1
       AND SAFRA       = 2011        
    GROUP BY DT_MOV  
)
ORDER BY DT_MOV, COD_BLOCO

Resultado:

DT_MOV

BLOCO

PESO

27/04/2011

138010

883140

27/04/2011

303010

1151420

27/04/2011

314050

896300

27/04/2011

333010

1170580

27/04/2011

516010

532740

27/04/2011

539010

241540

27/04/2011

541020

1086940

27/04/2011

99999999

5962660

 

 

 

Abaixo está o exemplo com a Função Rollup, o SQL fica mais simples e mais eficiente.

 


SELECT DT_MOV, COD_BLOCO, SUM(PESO_BRUTO - PESO_TARA) PESO
  FROM OS_PESAGENS
WHERE COD_EMPRESA = 1
   AND SAFRA       = 2011    
GROUP BY ROLLUP(DT_MOV, COD_BLOCO)   

 

 

Resultado:

DATA

BLOCO

PESO

27/04/2011

138010

883140

27/04/2011

303010

1151420

27/04/2011

314050

896300

27/04/2011

333010

1170580

27/04/2011

516010

532740

27/04/2011

539010

241540

27/04/2011

541020

1086940

27/04/2011


5962660

28/04/2011

110010

306800

28/04/2011

138010

707740

28/04/2011

138020

499040

28/04/2011

303010

1560970

28/04/2011

314050

1179980

28/04/2011

333010

1550740

28/04/2011

516010

1192800

28/04/2011

539010

876160

28/04/2011


7874230

Neste exemplo apresentamos a Função Rollup com apenas 2 níveis, agora iremos aumentar um nível, pois ainda não temos um total geral, apenas subtotais.



  SELECT COD_EMPRESA, DT_MOV, COD_BLOCO, SUM(PESO_BRUTO - PESO_TARA) PESO
   FROM OS_PESAGENS
 WHERE COD_EMPRESA = 1
     AND SAFRA       = 2011
GROUP BY COD_EMPRESA, ROLLUP(DT_MOV, COD_BLOCO)   

Resultado:

EMP

DT_MOV

COD_BLOCO

PESO

1

27/04/2011

138010

883140

1

27/04/2011

303010

1151420

1

27/04/2011

314050

896300

1

27/04/2011

333010

1170580

1

27/04/2011

516010

532740

1

27/04/2011

539010

241540

1

27/04/2011

541020

1086940

1

27/04/2011


5962660

1

28/04/2011

110010

306800

1

28/04/2011

138010

707740

1

28/04/2011

138020

499040

1

28/04/2011

303010

1560970

1

28/04/2011

314050

1179980

1

28/04/2011

333010

1550740

1

28/04/2011

516010

1192800

1

28/04/2011

539010

876160

1

28/04/2011


7874230

.....




1



3349829620

 

Concluímos que a função ROLLUP, é fácil de usar, altamente eficiente e com sobrecarga mínima para um consulta, não esquecendo que quando usarmos Group by não há necessidade de usar Order by (Tunning).

Obrigada.

Até o Próximo Artigo.

 

Rejane.