Con este ejemplo de T-SQL, puedes transformar fácilmente columnas en filas con solo un paso gracias a la función UNPIVOT de SQL Server.
Es el opuesto exacto de la consulta PIVOT. En este ejemplo, solo se utilizan como columnas los seis primeros meses del año, es decir, de enero a junio. Sin embargo, puedes extender la consulta a los 12 períodos del año añadiendo los que faltan.
Table of Contents
1. Crear datos para transformar en filas usando el operador UNPIVOT
Por ejemplo, la tabla de Ventas de SQL Server contiene una columna de tipo y las columnas de los meses. Contienen respectivamente el tipo y la cantidad de ventas por mes. Para empezar, solo copia y pega la consulta SQL para la creación de la tabla dentro de SSMS.
Primero que todo, crea la tabla de muestra usando este script, simplemente copia y pega el ejemplo en tu ventana de SQL Server Management Studio.
-- Primero que todo, ELIMINA la tabla de Ventas por mes si ya existe en la base de datos IF EXISTS( SELECT 1 FROM sys.objects WHERE object_id = object_id(N'[dbo].[SALES_BY_MONTH]') AND type in (N'U') ) -- BEGIN DROP TABLE [dbo].[SALES_BY_MONTH] END; -- Crea la tabla de VENTAS CREATE table [dbo].[SALES_BY_MONTH] ( [SalesType] NVARCHAR(20), [January] NUMERIC(5), [February] NUMERIC(5), [March] NUMERIC(5), [April] NUMERIC(5), [May] NUMERIC(5), [June] NUMERIC(5) );
2. Insertar datos en la tabla fuente para transformar
A continuación, inserta los datos en la tabla a ser transpuesta. Cada inserción de datos en SQL añade 12 nuevas cantidades de ventas. Una columna por mes, con el tipo de venta asociado.
Añade los meses que faltan si es necesario. De esta manera podrás transformar los 12 meses del año de columnas a filas en una única consulta de SQL Server.
-- Inserta datos de ventas de muestra para cada mes: es decir, de enero a junio -- Las columnas de los meses serán transformadas de columnas a filas INSERT INTO dbo.SALES_BY_MONTH ( [SalesType], [January], [February], [March], [April], [May], [June] ) VALUES ( N'Ventas', 1000, 2000, 3000, 4000, 5000, 6000); INSERT INTO dbo.SALES_BY_MONTH ( [SalesType], [January], [February], [March], [April], [May], [June] ) VALUES ( N'Descuentos', 100, 200, 300, 400, 500, 600); INSERT INTO dbo.SALES_BY_MONTH ( [SalesType], [January], [February], [March], [April], [May], [June] ) VALUES ( N'Ofertas', 10, 20, 30, 40, 50, 60); -- Verifica las filas insertadas en la tabla de ventas SELECT * FROM dbo.SALES_BY_MONTH;
3. Consulta UNPIVOT de SQL Server para transformar columnas en filas
Finalmente, la función UNPIVOT de SQL Server se compone de 3 pasos diferentes para transponer las columnas en filas.
- La selección de las 3 columnas de resultado, es decir, Tipo, Mes y Cantidad.
- Después la subconsulta SQL con la selección original de datos.
- La operación UNPIVOT propiamente dicha con los 6 meses nombrados explícitamente.
-- UNPIVOT de Columnas a Filas con Consulta SQL SELECT [TYPE], Month, Amount FROM ( SELECT [TYPE], [January], [February], [March], [April], [May], [June] FROM dbo.SALES_BY_MONTH ) sbm UNPIVOT (Amount FOR Month IN ([January], [February], [March], [April], [May], [June]) )AS SalesUnPivot;
Sobre los operadores PIVOT y UNPIVOT de SQL Server
Además, si todavía tienes dificultades con este operador UNPIVOT de SQL Server y su sintaxis, simplemente copia y pega el ejemplo y repite los tres pasos adaptándolos a tu caso real. Empieza por renombrar las columnas para entender cómo funciona. En conclusión, para leer más detalles, la documentación oficial de Microsoft para la función unpivot está disponible. UNPIVOT es lo opuesto a la función PIVOT, aquí tienes otro breve tutorial para usar la función PIVOT de SQL Server.
Be the first to comment