Mostrando entradas con la etiqueta T-SQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta T-SQL. Mostrar todas las entradas

lunes, 4 de diciembre de 2017

Receta T-SQL No. 5-5: Crear un Cubo Multidimensional para un Resultado

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
6. Práctica: Subtotal de Productos
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

Con esta receta T-SQL se pretende mostrar cómo sumarizar un conjunto de resultados en un cubo multidimensional. Esta operación es de importante interés para obtener totales a partir de la combinación o agrupación de varias columnas respecto a otra que representa una cantidad, un valor, etc. Se usará el operador CUBE.

2. Palabras Clave

  • Combinación
  • Cubo
  • Multidimensional
  • Resumen

3. Problema


Se requiere obtener los subtotales a partir de todas las combinaciones posibles de las columnas Traje y Color. Los datos con los que se cuentan son:
Datos a combinar
Tabla 1. Datos a combinar.

3. Solución

T-SQL cuenta con el operador CUBE para generar todas las posibles combinaciones a partir de los nombres de columnas especificados como argumentos.

4. Discusión de la Solución

CUBE ("GROUPING (Transact-SQL)", 2017) es un operador de la cláusula GROUP BY, con el cual podemos obtener todas las combinaciones posibles de columnas. Las columnas se especifican como argumentos.

Para el caso que se requiere resolver es necesario crear la siguiente combinación:

...GROUP BY CUBE(Traje, Color)

Pero además en la cláusula SELECT se ha de especificar la columna que se quiere sumarizar o agregar:

SELECT Traje, Color, SUM(Cantidad) AS SumaCantidades ...

Nótese cómo ha resaltado la tercera columna. Esta columna contendrá la suma de los datos combinados; por ejemplo 350 que será el total de la combinación de las blusas tanto de color rojo como amarillo.

5. Práctica: Subtotal de Productos

El código T-SQL para obtener le resultado requerido es, entonces:

SELECT Traje, Color, SUM(Cantidad) AS SumaCantidades
    FROM Producto
    GROUP BY CUBE(Traje, Color);

Una vez ejecutemos esta sentencia, obtendremos:
Resultado combinación con CUBE
Tabla 2. Resultado combinación con CUBE.

La fila que contiene el valor NULL para las columnas Traje y Color el total de blusas y camisas que ya sean de color amarillo o rojo es de 850. Que es lo mismo que sumar la columna Cantidad de la Tabla 1.

7. Conclusiones

A través de esta receta el lector ha comprendido los básicos de combinaciones de columnas para obtener subtotales a través del operador CUBE de la cláusula GROUP BY.

8. Literatura & Enlaces

Brimhall, J., Dye, D., Gennick, J., Roberts, A., Sheffield, W. (2012). SQL Server 2012 T-SQL Recipes - A Problem-Solution Approach. United States: Apress.
GROUPING (Transact-SQL) | Microsoft Docs (2017). Recuperado desde: https://docs.microsoft.com/en-us/sql/t-sql/functions/grouping-transact-sql


O

lunes, 11 de julio de 2016

Receta T-SQL No. 5-4: ¿Cómo Remover Duplicados de un Resumen de Detalles?

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 Cláusula DISTINCT
6. Práctica: Remoción de Duplicados
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

Esta receta T-SQL explica cómo usar la cláusula DISTINCT para remover los duplicados de una resumen de detalles. Como ejemplo práctico se muestra cómo obtener las tasas únicas por cada día del mes de enero de 2003.

2. Palabras Clave

  • DISTINCT
  • Duplicado

3. Problema

Remover duplicados de un resumen de detalles.

4. Solución

La cláusula DISTINCT remueve los duplicados de un conjunto de resultados.

5. Discusión de la Solución

5.1 Cláusula DISTINCT

T-SQL cuenta con la cláusula DISTINCT para remover duplicados de un conjunto de resultados. Esta cláusula sólo puede ser usada para sentencias SELECT.

La sintaxis para la cláusula DISTINCT es: 

SELECT DISTINCT expresion
    FROM tablas
    [ WHERE {predicado}]

Un ejemplo práctico puede consistir en devolver los nombres únicos que existen en tabla Person.Person de la base de datos AdventureWorks2012

SELECT DISTINCT FirstName AS 'Primer Nombre'
FROM Person.Person
ORDER BY FirstName;

6. Práctica: Remoción de Duplicados

Este ejemplo ilustra cómo determinar la cantidad de valores únicos para el historial de pagos de empleados para los primeros días del mes de enero de 2003.

La primera parte, línea 2, cuenta todos los valores Rate mientras que la línea 3 cuenta los valores Rate distintos en los registros recuperados para el rango de fecha establecido en la cláusula WHERE.


Valores obtenidos después de ejecutar esta sentencia en Microsoft SQL Management Studio
Tasas distintas
Figura 1. Tasas distintas.

7. Conclusiones

Quedó demostrado que la cláusula DISTINCT remueve los duplicados de un conjunto de registros.

La próxima receta T-SQL explica cómo retornar detalles con el operador CUBE.

8. Literatura & Enlaces

Brimhall, J., Dye, D., Gennick, J., Roberts, A., Sheffield, W. (2012). SQL Server 2012 T-SQL Recipes - A Problem-Solution Approach. United States: Apress.
SQL Server: DISTINCT Clause (2016, junio 11). Recuperado desde: http://www.techonthenet.com/sql_server/distinct.php


V

Receta T-SQL No. 5-3: ¿Cómo Filtrar un Grupo de Resumen?

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 Operador HAVING
6. Práctica: 
Conclusiones
Literatura & Enlaces

1. Introducción

En la receta T-SQL anterior se demostró cómo crear un grupo de resumen a través del uso del operador GROUP BY. El ejemplo de ilustración consistió en obtener el total de ventas diarias durante el mes de julio de 2005. Ese mismo ejemplo será ampliado para retornar sólo los días del mes que superen cierta cantidad de ventas específica.

2. Palabras Clave

  • Filtro
  • GROUP BY
  • Grupo

3. Problema

Reportar el total de ventas diarias para un mes dado y que superen un valor de 15.000.

4. Solución

Además de usar el operador de agrupamiento GROUP BY para las fechas del mes de julio de 2015, filtrar los resultados con el operador HAVING.

5. Discusión de la Solución

5.1 Operador HAVING

Con HAVING se especifica una condición sobre un grupo o agregación. Este operador se aplica para la cláusula de proyección SELECT y normalmente aparece acompañado del operador de resumen HAVING.

Esta es su sintaxis de uso: 

SELECT proyección
FROM tablas
[ WHERE {predicados}]
[ GROUP BY {expresión}]
[ HAVING {condición}]

6. Práctica: Filtrado de Ventas Diarias

Este ejemplo ilustra cómo obtener las ventas diarias que superen cierto predicado. La condición consiste en que el valor de ventas debe ser mayor o igual a 15.000 unidades monetarias.

Hasta la línea 6 se especifica la recuperación de las ventas diarias para el mes de julio de 2005; esto se explicó con detalle en Receta T-SQL No. 5-2: ¿Cómo Crear un Grupo de Resumen?.


Ahora en la línea 7 se especifica el filtro para retornar los días de julio que tuvieron ventas superiores a 15000; esto a través del uso del operador HAVING.


Una vez ejecutada esta sentencia se obtienen estos registros en la ventana de resultados de Microsoft SQL Server Management Studio
Días de julio de 2015 con ventas mayores a 15000
Figura 1. Días de julio de 2015 con ventas mayores a 15000.

7. Conclusiones

Se demostró que el operador HAVING permite especificar un filtro para un resumen; en este caso para encontrar todas las ventas diarias que superan una determinada cantidad.

Otra operación interesante es la de remover duplicados de una lista que contiene detalles de resultados. Este será el tópico de la siguiente receta C#.

8. Literatura & Enlaces

Brimhall, J., Dye, D., Gennick, J., Roberts, A., Sheffield, W. (2012). SQL Server 2012 T-SQL Recipes - A Problem-Solution Approach. United States: Apress.
Receta T-SQL No. 5-2: ¿Cómo Crear un Grupo de Resumen? (2016, julio 10). Recuperado desde: https://ortizol.blogspot.com.co/2016/07/receta-t-sql-no-5-2-como-crear-un-grupo-de-resumen.html


V

sábado, 9 de julio de 2016

Receta T-SQL No. 5-2: ¿Cómo Crear un Grupo de Resumen?

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 Operador GROUP BY
6. Práctica: Creación Grupos de Resumen
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

El propósito de esta nueva receta T-SQL es enseñar al programador a resumir una columna con respecto a cada cambio en otra columna. La sección práctica demuestra este tipo de operación con el reporte de la cantidad total de órdenes de venta por cada día de un mes en específico.

2. Palabras Clave

  • Resumen
  • T-SQL

3. Problema

Reportar el total de ventas diarias para un mes dado.

4. Solución

T-SQL cuenta con los operadores GROUP BY para crear grupos de resumen.

5. Discusión de la Solución

5.1 Operador GROUP BY

El operador GROUP BY agrupa un conjunto de registros/filas. Esta agrupación se lleva a cabo con la especificación de una o más columnas o expresiones. Por cada una de los grupos se retorna una fila. Esta operación se relaciona con funciones de agregación; i.e., SUM(), AVG(), etc.

6. Práctica: Creación Grupos de Resumen

El código SQL que viene a continuación totaliza las ventas diarias para el mes de julio de 2015.

SELECT OrderDate AS 'Fecha Orden',
SUM(TotalDue) AS 'Total por día'
FROM Sales.SalesOrderHeader
WHERE OrderDate >= '2005-07-01T00:00:00'
AND OrderDate < '2005-08-01T00:00:00'
GROUP BY OrderDate;

El operador GROUP BY agrupa las órdenes de compra por día para el mes de julio de 2015. La cláusula WHERE especifica el rango de la fecha. Por cada día del mes de julio se totaliza las ventas a través del operador de agregación SUM().

Este el resultado obtenido en Microsoft SQL Management Studio
Ventas por día
Figura 1. Ventas por día.

7. Conclusiones

El operador GROUP BY facilita la agrupación de registros para aplicar operaciones de agregación -suma promedio, por ejemplo-.

En la tercera receta T-SQL de la serie Agrupación y Resumen el programador comprenderá cómo restringir un resultado a grupos de interés a través del operador HAVING.

8. Literatura & Enlaces

Brimhall, J., Dye, D., Gennick, J., Roberts, A., Sheffield, W. (2012). SQL Server 2012 T-SQL Recipes - A Problem-Solution Approach. United States: Apress.
GROUP BY (Transact-SQL) (2016, julio 9). Recuperado desde: https://msdn.microsoft.com/en-us/library/ms177673.aspx


V

viernes, 8 de julio de 2016

Receta T-SQL No. 5-1: ¿Cómo Resumir un Conjunto de Resultados?

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 Función SUM()
6. Práctica: Suma de un Conjunto de Filas
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

Esta nueva serie de recetas T-SQL -Agrupación y Resumen- explica y expone varios ejemplos detallados para la agrupación y resumen. Para ello se explicará con más detalle el uso del operador GROUP BY en una cláusula SELECT: su utilidad es determinar los grupos donde deben ser localizados un grupo de filas. Una versión simplificada de la sintaxis podría ser

SELECT columna1, SUM(columna2)
    FROM lista_tablas
    [WHERE predicados]
    GROUP BY Columna2


Se continua progresando en la comprensión de SQL Server. El esfuerzo, la persistencia, la tenacidad, la ambición, la curiosidad abre caminos.


Esta primera receta describe cómo resumir un conjunto de resultados. Se recurre al uso de la función SUM() para sumar los valores de una columna específica. ¡Manos a la obra!

2. Palabras Clave

  • Agregación
  • Agrupación
  • GROUP BY
  • SQL Server
  • SUM()

3. Problema

Sumar un conjunto de filas.

4. Solución

T-SQL cuenta con la función SUM() para sumar los valores números de un grupo de filas.

5. Discusión de la Solución

5.1 Función SUM()

El operador SUM() computa la suma de un conjunto de valores. Esta operación sólo aplica para operandos de tipo de dato numérico; en caso de encontrarse valores NULL éstos son ignorados.

La sintaxis general comprende 

SUM ([ALL | DISTINCT] expresión)

En la siguiente tabla se enlistan los posibles valores de retorno de esta función: 
Tipos de dato de retorno de SUM()
Figura 1. Tipos de dato de retorno de SUM() ("SUM (Transact-SQL)", 2016).

6. Práctica: Suma de un Conjunto de Filas

La siguiente consulta SQL calcula la suma de los valores de la columna Quantity de la tabla Production.ProductInventory.

SELECT SUM(i.Quantity) AS 'Total'
FROM Production.ProductInventory i;

Una vez ejecutada, este el resultado que se produce en Microsoft SQL Server Management Studio
Suma cantidad inventario productos
Figura 2. Suma cantidad inventario productos.

7. Conclusiones

Se comprendió que la función SUM() calcula la suma total de valores numéricos.

En la próxima receta T-SQL se estudiará la creación de grupos de resumen.

8. Literatura & Enlaces

Brimhall, J., Dye, D., Gennick, J., Roberts, A., Sheffield, W. (2012). SQL Server 2012 T-SQL Recipes - A Problem-Solution Approach. United States: Apress.
SUM (Transact-SQL) (2016, julio 8). Recuperado desde: https://msdn.microsoft.com/en-us/library/ms187810.aspx


V

jueves, 7 de julio de 2016

Receta T-SQL No. 4-15: ¿Cómo Comparar los Registros de Dos Tablas?

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 Operador UNION
6. Práctica: Comparación de Registros de Dos Tablas
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

Esta receta T-SQL constituye la última de la serie de Consultas sobre Múltiples Tablas. Aquí se explica el proceso de comparación de dos tablas en búsqueda de diferencia entre sus registros. En la sección práctica se escribe la consulta más extensa que se haya escrito en esta serie de recetas T-SQL, sin embargo el propósito es dejar claro el concepto global, aunque con un enfoque práctico, de este proceso que puede emerger como requerimiento en el tratamiento de datos en una aplicación específica.

2. Palabras Clave

  • Aplicación
  • Registro
  • Tabla

3. Problema

Comparar dos tablas en búsqueda de diferencia entre registros.

4. Solución

Usar los operadores GROUP BY, HAVING y UNION para determinar la existencia de filas duplicadas.

5. Discusión de la Solución

5.1 Operador UNION

[Nota: En Receta T-SQL No. 4-11: ¿Cómo Eliminar Duplicados en una Unión? se describe el uso de este operador de unión de conjuntos de registros.]

Este operador es clave para comparar los registros de dos tablas. En la siguiente sección práctica se presenta su uso: se unen las comparaciones de la tabla 1 frente la tabla 2, y viceversa.

6. Práctica: Comparación de Registros de Dos Tablas

El primer paso para esta sección práctica es crear una copia de la tabla Person.Password de la base de datos AdventureWorks.

SELECT *
INTO Person.CopiaPassword
FROM Person.Password;

El segundo paso consiste en definir la consulta para comparar los registros entre las dos tablas, y luego reportar las diferencias encontradas: 

En las líneas 1-24 se crea la primera consulta que determina si existen registros duplicados de la tabla Password respecto CopiaPassword. El proceso complementario, es decir de la tabla CopiaPassword respecto Password se efectúa en las líneas 26-49.


Cuando este código es ejecutado en Microsoft SQL Management Studio se obtiene: 
Ejecución consulta de comparación tablas
Figura 1. Ejecución consulta de comparación tablas.

Nótese que no hay diferencia alguna debido a que CopiaPassword es idéntica a Password.


Para comprobar que la consulta T-SQL anterior efectivamente está realizando la comparación de registros se añade los siguientes cambios sobre ambas tablas: 

UPDATE Person.CopiaPassword
SET PasswordSalt = 'EP9TKLO'
WHERE BusinessEntityID IN (9783, 221);

UPDATE Person.Password
SET PasswordSalt = 'UDMWI11'
WHERE BusinessEntityID IN (42, 4242);

INSERT INTO Person.CopiaPassword
SELECT *
FROM Person.CopiaPassword
WHERE BusinessEntityID = 1;
Cambios en las tablas Password y CopiaPassword
Figura 2. Cambios en las tablas Password y CopiaPassword.

Ahora se ejecuta de nuevo la sentencia T-SQL del archivo ComparacionTablas.sql
Ejecución consulta de comparación tablas (segunda ejecución)
Figura 3. Ejecución consulta de comparación tablas (segunda ejecución).

El lector observará que en la columna BusinessEntityID se enlistan los IDs que se diferencian entre las dos tablas Password y CopiaPassword. Por otra parte, en Contador Duplicados se muestra el número de duplicados de un registro para una tabla en particular.

7. Conclusiones

Se ha comprendido cómo comparar los registros de dos tablas. Al principio este proceso puede resultar complicado debido a la complejidad que puede emerger a partir de la longitud de la consulta, pero al ponerlo en práctica en aplicaciones particulares se afianzará su entendimiento.

Se ha alcanzado el final de las recetas T-SQL centradas en Consultas sobre Múltiples Tablas. A partir de la siguiente serie se tratará otro tópico importante en el diseño de consultas: Agrupación y Resumen.

8. Literatura & Enlaces

Brimhall, J., Dye, D., Gennick, J., Roberts, A., Sheffield, W. (2012). SQL Server 2012 T-SQL Recipes - A Problem-Solution Approach. United States: Apress.
Receta T-SQL No. 4-11: ¿Cómo Eliminar Duplicados en una Unión? (2016, julio 7). Recuperado desde: https://ortizol.blogspot.com.co/2016/06/receta-t-sql-no-4-11-como-eliminar-duplicados-en-una-union.html


V