Cláusula WITH ROLLUP com GROUP BY – Esta cláusula determina que, além das linhas normalmente oferecidas pelo GROUP BY, também sejam obtidas como resultado as linhas de sumário. O sumário dos grupos é feito em uma ordem hierárquica, a partir do nível mais baixo até o mais alto. A ordem que define a hierarquia do grupo é determinada pela ordem na qual são definidas as colunas agrupadas. Caso esta ordem seja alterada, consequentemente a quantidade de linhas produzidas pode ser afetada.

 Usada em parceria com o GROUP BY, a WITH ROLLUP acrescenta uma linha na qual são exibidos os subtotais e totais dos registros já distribuídos em colunas agrupadas. Assim, é possível analisar diversas informações em uma só consulta, por exemplo, o fabricante do produto que possui maior quantidade de unidades em estoque ou mesmo o tipo de produto cujo valor estocado ultrapassa os 100 mil.

 Veja abaixo a instrução e o resultado de um exemplo com o WITH ROLLUP:

SELECT Tipo, Fabricante, Nome, SUM(Quantidade) AS 'Quantidade em Estoque', SUM(Quantidade * VlUnitario) AS 'Valor em Estoque'

   FROM Produtos

  GROUP BY Tipo, Fabricante, Nome

   WITH ROLLUP


 Perceba que o resultado da consulta é bem completo, com diversas informações.

 Cláusula CUBE com GROUP BY – A cláusula CUBE tem a finalidade de determinar que as linhas de sumário sejam inseridas no conjunto de resultados. A linha de sumário é retornada para cada combinação possível de grupos e de subgrupos no conjunto de resultados.

 Visto que a cláusula CUBE é responsável por retornar todas as combinações possíveis de grupos e subgrupos, a quantidade de linhas não está relacionada à ordem em que são determinadas as colunas de agrupamento. Portanto, é mantida a quantidade de linhas já apresentada.

 A quantidade de linhas de sumário no conjunto de resultados é especificada de acordo com a quantidade de colunas incluídas na cláusula GROUP BY. Cada uma dessas colunas é vinculada sob o valor NULL do agrupamento, o qual é aplicado a todas as outras colunas.

 A cláusula WITH CUBE, em conjunto à GROUP BY, gera totais e subtotais, apresentando vários agrupamentos de acordo com as colunas definidas no GROUP BY. Veja um exemplo e seu resultado abaixo:

SELECT Tipo, Fabricante, Nome, SUM(Quantidade) AS 'Quantidade em Estoque', SUM(Quantidade * VlUnitario) AS 'Valor em Estoque'

  FROM Produtos

 GROUP BY Tipo, Fabricante, Nome

   WITH CUBE


 Note que é retornado mais de 60 registros.

 Cláusula JOIN com GROUP BY – Mais uma cláusula usada junto com GROUP BY, a JOIN permite incluir dados adicionais sobre um determinado agrupamento, dados estes que estão disponíveis em outra tabela (mais sobre JOINS no artigo sobre Associação de Tabelas). Vamos supor as tabelas Cargo e Funcionario a seguir (também do artigo citado anteriormente):


 Assim podemos relacionar essas tabelas por meio do JOIN e usar em conjunto com o GROUP BY. Veja como na instrução a seguir, e seu respectivo resultado:

SELECT F.NomeFuncionario, C.NomeCargo, F.SalarioFuncionario

  FROM Funcionario as F

 INNER JOIN Cargo as C

    ON C.IdCargo = F.IdCargo

 GROUP BY F.NomeFuncionario, C.NomeCargo, F.SalarioFuncionario


 Fonte de Consulta: Apostila de SQL Server, da Impacta Tecnologia.

 Assim finalizo o artigo. Muito obrigado a todos!

 Um abraço, e até o próximo artigo.

 Wellington Balbo de Camargo

 wellingtonbalbo@gmail.com