{"id":30654,"date":"2024-03-13T07:08:00","date_gmt":"2024-03-13T06:08:00","guid":{"rendered":"https:\/\/expert-only.com\/?p=30654"},"modified":"2024-03-13T11:39:33","modified_gmt":"2024-03-13T10:39:33","slug":"ejemplo-de-unpivot-en-sql-server","status":"publish","type":"post","link":"https:\/\/expert-only.com\/es\/t-sql\/ejemplo-de-unpivot-en-sql-server\/","title":{"rendered":"Ejemplo de UNPIVOT en SQL Server"},"content":{"rendered":"\n<p><strong>Con este ejemplo de T-SQL, puedes transformar f\u00e1cilmente columnas en filas con solo un paso gracias a la funci\u00f3n UNPIVOT de SQL Server.<\/strong><\/p>\n\n\n\n<p>Es el opuesto exacto de la consulta PIVOT. En este ejemplo, solo se utilizan como columnas los seis primeros meses del a\u00f1o, es decir, de enero a junio. Sin embargo, puedes extender la consulta a los 12 per\u00edodos del a\u00f1o a\u00f1adiendo los que faltan.<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_83 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/expert-only.com\/es\/t-sql\/ejemplo-de-unpivot-en-sql-server\/#1-crear-datos-para-transformar-en-filas-usando-el-operador-unpivot\" >1. Crear datos para transformar en filas usando el operador UNPIVOT<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/expert-only.com\/es\/t-sql\/ejemplo-de-unpivot-en-sql-server\/#2-insertar-datos-en-la-tabla-fuente-para-transformar\" >2. Insertar datos en la tabla fuente para transformar<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/expert-only.com\/es\/t-sql\/ejemplo-de-unpivot-en-sql-server\/#3-consulta-unpivot-de-sql-server-para-transformar-columnas-en-filas\" >3. Consulta UNPIVOT de SQL Server para transformar columnas en filas<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\" id=\"h-1-crear-datos-para-transformar-en-filas-usando-el-operador-unpivot\"><span class=\"ez-toc-section\" id=\"1-crear-datos-para-transformar-en-filas-usando-el-operador-unpivot\"><\/span>1. Crear datos para transformar en filas usando el operador UNPIVOT<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>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\u00f3n de la tabla dentro de SSMS.<\/p>\n\n\n\n<p><strong>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.<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"mssql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">-- Primero que todo, ELIMINA la tabla de Ventas por mes si ya existe en la base de datos\nIF EXISTS( \n\tSELECT 1 FROM sys.objects\n     WHERE object_id = object_id(N'[dbo].[SALES_BY_MONTH]')\n\t\tAND type in (N'U') )\n-- BEGIN DROP TABLE [dbo].[SALES_BY_MONTH]\nEND;\n\n-- Crea la tabla de VENTAS\nCREATE table [dbo].[SALES_BY_MONTH] (\n    [SalesType] NVARCHAR(20),\n    [January] NUMERIC(5),\n    [February] NUMERIC(5),\n    [March] NUMERIC(5),\n    [April] NUMERIC(5),\n    [May] NUMERIC(5),\n    [June] NUMERIC(5)\n);\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-2-insertar-datos-en-la-tabla-fuente-para-transformar\"><span class=\"ez-toc-section\" id=\"2-insertar-datos-en-la-tabla-fuente-para-transformar\"><\/span>2. Insertar datos en la tabla fuente para transformar<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><strong>A continuaci\u00f3n, inserta los datos en la tabla a ser transpuesta. Cada inserci\u00f3n de datos en SQL a\u00f1ade 12 nuevas cantidades de ventas. Una columna por mes, con el tipo de venta asociado.<\/strong><\/p>\n\n\n\n<p>A\u00f1ade los meses que faltan si es necesario. De esta manera podr\u00e1s transformar los 12 meses del a\u00f1o de columnas a filas en una \u00fanica consulta de SQL Server.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"mssql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">-- Inserta datos de ventas de muestra para cada mes: es decir, de enero a junio\n-- Las columnas de los meses ser\u00e1n transformadas de columnas a filas\nINSERT INTO dbo.SALES_BY_MONTH ( [SalesType], [January], [February], [March], [April], [May], [June] )\nVALUES ( N'Ventas', 1000, 2000, 3000, 4000, 5000, 6000);\n\nINSERT INTO dbo.SALES_BY_MONTH ( [SalesType], [January], [February], [March], [April], [May], [June] )\nVALUES ( N'Descuentos', 100, 200, 300, 400, 500, 600);\n\nINSERT INTO dbo.SALES_BY_MONTH ( [SalesType], [January], [February], [March], [April], [May], [June] )\nVALUES ( N'Ofertas', 10, 20, 30, 40, 50, 60);\n\n-- Verifica las filas insertadas en la tabla de ventas\nSELECT * \nFROM   dbo.SALES_BY_MONTH;<\/pre>\n\n\n<div class=\"wp-block-image wp-image-394 size-full\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/expert-only.net\/wp-content\/uploads\/2017\/06\/UNPIVOT-Source-Table-SQL-Server.png\" alt=\"Insertar datos para transformar de columnas a filas usando T-SQL UNPIVOT\" class=\"wp-image-394\"\/><figcaption class=\"wp-element-caption\"><em>Insertar datos para transformar de columnas a filas usando T-SQL UNPIVOT<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-3-consulta-unpivot-de-sql-server-para-transformar-columnas-en-filas\"><span class=\"ez-toc-section\" id=\"3-consulta-unpivot-de-sql-server-para-transformar-columnas-en-filas\"><\/span>3. Consulta UNPIVOT de SQL Server para transformar columnas en filas<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Finalmente, la funci\u00f3n UNPIVOT de SQL Server se compone de 3 pasos diferentes para transponer las columnas en filas.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>La selecci\u00f3n de las 3 columnas de resultado, es decir, Tipo, Mes y Cantidad.<\/li>\n\n\n\n<li>Despu\u00e9s la subconsulta SQL con la selecci\u00f3n original de datos.<\/li>\n\n\n\n<li>La operaci\u00f3n UNPIVOT propiamente dicha con los 6 meses nombrados expl\u00edcitamente.<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"mssql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">-- UNPIVOT de Columnas a Filas con Consulta SQL\nSELECT [TYPE], Month, Amount\nFROM (\t\n\tSELECT [TYPE], [January], [February], [March], [April], [May], [June]\n\tFROM dbo.SALES_BY_MONTH \t) sbm\nUNPIVOT\n   (Amount FOR Month IN \n      ([January], [February], [March], [April], [May], [June])\n)AS SalesUnPivot;\n<\/pre>\n\n\n<div class=\"wp-block-image wp-image-395 size-full\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/expert-only.net\/wp-content\/uploads\/2017\/06\/SQL-Server-UNPIVOT-Columns-To-Rows.png\" alt=\"Ejemplo de consulta UNPIVOT de SQL Server en SSMS\" class=\"wp-image-395\"\/><figcaption class=\"wp-element-caption\"><em>Ejemplo de consulta UNPIVOT de SQL Server en SSMS<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-sobre-los-operadores-pivot-y-unpivot-de-sql-server\">Sobre los operadores PIVOT y UNPIVOT de SQL Server<\/h3>\n\n\n\n<p>Adem\u00e1s, si todav\u00eda tienes dificultades con este operador UNPIVOT de SQL Server y su sintaxis, simplemente copia y pega el ejemplo y repite los tres pasos adapt\u00e1ndolos a tu caso real. Empieza por renombrar las columnas para entender c\u00f3mo funciona. En conclusi\u00f3n, para leer m\u00e1s detalles, la documentaci\u00f3n oficial de Microsoft para la <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/t-sql\/queries\/from-using-pivot-and-unpivot?view=sql-server-2017\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">funci\u00f3n unpivot<\/a> est\u00e1 disponible. UNPIVOT es lo opuesto a la funci\u00f3n <a href=\"https:\/\/dictionary.cambridge.org\/dictionary\/english\/pivot\" target=\"_blank\" rel=\"noreferrer noopener\">PIVOT<\/a>, aqu\u00ed tienes otro breve tutorial para usar la <a href=\"https:\/\/expert-only.com\/en\/t-sql\/how-to-pivot-rows-to-columns-in-sql-server\/\"><strong>funci\u00f3n PIVOT de SQL Server<\/strong><\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-wp-embed is-provider-tutoriales-de-sql-y-ti wp-block-embed-tutoriales-de-sql-y-ti\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"V48yvfeCFX\"><a href=\"https:\/\/expert-only.com\/en\/t-sql\/how-to-pivot-rows-to-columns-in-sql-server\/\">How to Pivot Rows To Columns in SQL Server ? Simple Query<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"\u00abHow to Pivot Rows To Columns in SQL Server ? Simple Query\u00bb \u2014 Tutoriales de SQL y TI\" src=\"https:\/\/expert-only.com\/en\/t-sql\/how-to-pivot-rows-to-columns-in-sql-server\/embed\/#?secret=qrmqd8NIxg#?secret=V48yvfeCFX\" data-secret=\"V48yvfeCFX\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>Utiliza el operador UNPIVOT de SQL Server para transformar datos de columnas a filas; este ejemplo de consulta T-SQL se explica paso a paso. <a class=\"mh-excerpt-more\" href=\"https:\/\/expert-only.com\/es\/t-sql\/ejemplo-de-unpivot-en-sql-server\/\" title=\"Ejemplo de UNPIVOT en SQL Server\">&#8230;<\/a><\/p>\n<\/div>","protected":false},"author":1,"featured_media":10761,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[455],"tags":[],"class_list":{"0":"post-30654","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-t-sql"},"_links":{"self":[{"href":"https:\/\/expert-only.com\/es\/wp-json\/wp\/v2\/posts\/30654","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/expert-only.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/expert-only.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/expert-only.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/expert-only.com\/es\/wp-json\/wp\/v2\/comments?post=30654"}],"version-history":[{"count":1,"href":"https:\/\/expert-only.com\/es\/wp-json\/wp\/v2\/posts\/30654\/revisions"}],"predecessor-version":[{"id":30658,"href":"https:\/\/expert-only.com\/es\/wp-json\/wp\/v2\/posts\/30654\/revisions\/30658"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/expert-only.com\/es\/wp-json\/wp\/v2\/media\/10761"}],"wp:attachment":[{"href":"https:\/\/expert-only.com\/es\/wp-json\/wp\/v2\/media?parent=30654"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/expert-only.com\/es\/wp-json\/wp\/v2\/categories?post=30654"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/expert-only.com\/es\/wp-json\/wp\/v2\/tags?post=30654"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}