SQL Server 2008: Mejoras para desarrolladores (III)!

Para concluir la serie de post sobre algunas de las mejoras que trae para los desarrolladores SQL Server 2008, en esta tercera entrega os voy a hablar de los GROUPING SETS (Nota: Puedes leer también las partes I y II de la serie). El operador GROUPING SETS es una extensión de la cláusula estándar GROUP BY del ANSI SQL 2006. Permite definir múltiples grupos en la misma consulta, lo que es particularmente útil cuando se quiere devolver sólo un subconjunto de datos de un cierto resultado. Como veremos, esta nueva cláusula habilita la definición en una misma columna grupos agregados sobre diferentes conjuntos de columnas de agrupamiento:

GROUB BY CLAUSE

RESULTS SETS

GROUP BY (col_A, col_B, col_C)

(col_A, col_B, col_C)

GROUP BY GROUPING SETS

((col_A, col_B), (col_A, col_C), (col_C))

(col_A, col_B)

(col_A, col_C)

(col_C)

Otras características de esta cláusula son:

  • Es como un UNION ALL de varias consultas con la cláusula GROUP BY que referencian diferentes partes del mismo conjunto de datos.
  • Más rápido y sencillo en consultas e informes.
  • Pueden ser concatenados para generar combinaciones de agrupamiento largas.

GROUB BY CLAUSE

RESULTS SETS

GROUP BY (col_A, col_B, col_C)

(col_A, col_B, col_C)

GROUP BY GROUPING SETS

(col_A, col_B) (col_C, col_D)

(col_A, col_C)

(col_A, col_D)

(col_B, col_C)

(col_B, col_D)

GROUPING SETS en acción

Vamos a comprobar cómo funciona este operador realizando la siguiente consulta sobre la BD Adventure Works:

select ST.Name as Territory,C.CustomerType,                                   

                               COUNT(*) as Sales

                               from Sales.Customer C

                               inner join Sales.SalesTerritory ST on

                               ST.TerritoryID=C.TerritoryID

                               GROUP BY GROUPING SETS (( ST.Name,C.CustomerType), ( ST.Name))

                               ORDER BY  ST.Name, C.CustomerType               

El resultado de ejecutar la sentencia anterior es el siguiente:

image

Como vemos, gracias a GROUPING SETS obtenemos los niveles de agrupación deseados y además nos devuelve el subtotal para cada subconjunto de agrupación. Y hasta aquí llega lo que os quería contar sobre novedades para desarrolladores en SQL Server 2008. Lógicamente, os he contado las novedades relativas a T-SQL, hay otras como LINQ y ADO.NET Entity Framework de las que ya se está hablando largo y tendido en Geeks.Ms. Espero que el post os haya resultado interesante.

Publicado por

Juan Carlos González

Juan Carlos es Ingeniero de Telecomunicaciones por la Universidad de Valladolid y Diplomado en Ciencias Empresariales por la Universidad Oberta de Catalunya (UOC). Cuenta con más de 12 años de experiencia en tecnologías y plataformas de Microsoft diversas (SQL Server, Visual Studio, .NET Framework, etc.), aunque su trabajo diario gira en torno a SharePoint & Office 365. Juan Carlos es MVP de Office Servers & Services desde 2015 (anteriormente fue reconocido por Microsoft como MVP de Office 365 y MVP de SharePoint Server desde 2008 hasta 2015), coordinador del grupo de usuarios .NET de Cantabria (Nuberos.Net, www.nuberos.es), co-fundador y coordinador del Grupo de Usuarios de SharePoint de España (SUGES, www.suges.es), así como co-director de la revista gratuita en castellano sobre SharePoint CompartiMOSS (www.compartimoss.com). Hasta la fecha, ha publicado 8 libros sobre SharePoint & Office 365 y varios artículos en castellano y en inglés sobre ambas plataformas.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *