{"id":2839,"date":"2023-09-11T20:43:36","date_gmt":"2023-09-11T20:43:36","guid":{"rendered":"https:\/\/manualsqlserver.com\/?p=2839"},"modified":"2025-07-24T01:23:29","modified_gmt":"2025-07-24T01:23:29","slug":"pivot-y-tabla-de-referencia-cruzada","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=2839","title":{"rendered":"Pivot y Tabla de referencia cruzada"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada__D.png\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"260\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada__D.png\" alt=\"\" class=\"wp-image-2840\"\/><\/a><\/figure>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Pivot y tablas de referencia cruzada<\/strong><\/p>\n\n\n\n<p>Las operaciones con la cl\u00e1usula Pivot nos permite convertir los resultados de una consulta que se muestra en filas y transponer los resultados en columnas.  Pivot utiliza las funciones de agregado para presentar los datos en columnas.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Para informaci\u00f3n de las funciones de agregado Ver <a href=\"https:\/\/manualsqlserver.com\/?p=207\">Funciones de agregado<\/a>.<\/p>\n\n\n\n<p>En este art\u00edculo vamos a mostrar varios ejercicios usando la cl\u00e1usula Pivot y ver los resultados de filas en columnas.<\/p>\n\n\n\n<p><strong>Usando la base de datos Northwind<\/strong><br>use Northwind<br>go<\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Ejercicio 1<\/strong><\/p>\n\n\n\n<p><strong>Listado de productos de las categorias 1,2 y 3 con la cantidad de unidades vendidas por mes en el a\u00f1o 1997<\/strong><\/p>\n\n\n\n<p>Antes de usar Pivot y hace la consulta con referencia cruzada, se va a crear la consulta.<\/p>\n\n\n\n<pre class=\"wp-block-code has-regular-font-size\"><code>set dateformat dmy\r\ngo\r\nselect \r\n\tP.ProductID As 'C\u00f3d. Producto',\r\n\tP.ProductName As 'Descripci\u00f3n',\r\n\tP.CategoryID As 'C\u00f3d. Categor\u00eda',\r\n\tDATENAME(MONTH, O.OrderDate) As 'Mes' ,\r\n\tsum(D.Quantity) As 'Cantidad Vendida'\r\n\tfrom dbo.&#91;Order Details] As D \r\n\tjoin dbo.Products As P on D.ProductID = P.ProductID\r\n\tjoin dbo.Orders As O on D.OrderID = O.OrderID\r\n\twhere P.CategoryID in (1,2,3)\r\n\t\tand O.OrderDate between '01\/01\/1997' and '31\/12\/1997'\r\n\tgroup by P.ProductID, P.ProductName, P.CategoryID, DATENAME(MONTH, O.OrderDate)\r\ngo<\/code><\/pre>\n\n\n\n<p><strong>La imagen muestra el resultado<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_01.png\"><img loading=\"lazy\" decoding=\"async\" width=\"814\" height=\"664\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_01.png\" alt=\"\" class=\"wp-image-2841\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_01.png 814w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_01-300x245.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_01-768x626.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_01-795x649.png 795w\" sizes=\"auto, (max-width: 814px) 100vw, 814px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>En el listado anterior se puede observar nombres de los meses, la cl\u00e1usula Pivot y la referencia cruzada agrupar\u00e1 por mes y obtendr\u00e1 los totales.<\/p>\n\n\n\n<p>Ordenamos la consulta anterior por Id del Producto para comprobar que los resultados son correctos,  nos fijaremos en la cantidad del producto con ID = 1<\/p>\n\n\n\n<pre class=\"wp-block-code has-regular-font-size\"><code>select \r\n\tP.ProductID As 'C\u00f3d. Producto',\r\n\tP.ProductName As 'Descripci\u00f3n',\r\n\tP.CategoryID As 'C\u00f3d. Categor\u00eda',\r\n\tDATENAME(MONTH, O.OrderDate) As 'Mes' ,\r\n\tsum(D.Quantity) As 'Cantidad Vendida'\r\n\tfrom dbo.&#91;Order Details] As D \r\n\tjoin dbo.Products As P on D.ProductID = P.ProductID\r\n\tjoin dbo.Orders As O on D.OrderID = O.OrderID\r\n\twhere P.CategoryID in (1,2,3)\r\n\t\tand O.OrderDate between '01\/01\/1997' and '31\/12\/1997'\r\n\tgroup by P.ProductID, P.ProductName, P.CategoryID, DATENAME(MONTH, O.OrderDate)\r\n\torder by P.ProductID\r\ngo<\/code><\/pre>\n\n\n\n<p><strong>La imagen muestra el resultado.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_02.png\"><img loading=\"lazy\" decoding=\"async\" width=\"724\" height=\"624\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_02.png\" alt=\"\" class=\"wp-image-2842\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_02.png 724w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_02-300x259.png 300w\" sizes=\"auto, (max-width: 724px) 100vw, 724px\" \/><\/a><\/figure>\n\n\n\n<p>La suma de los valores seleccionados de las cantidades vendidas en los meses para el producto 1 es: 304<\/p>\n\n\n\n<p><strong>Podemos comprobar la cantidad de unidades vendidas del producto 1 en 1997<br><\/strong>select<br>sum(d.Quantity)<br>from dbo.[Order Details] As D<br>join dbo.Orders As O on D.OrderID = O.OrderID<br>where D.ProductID = 1 and O.OrderDate between &#8217;01\/01\/1997&#8242; and &#8217;31\/12\/1997&#8242;<br>go<\/p>\n\n\n\n<p><strong>Formando la consulta con Pivot como referencia cruzada<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code has-regular-font-size\"><code>select \r\n\t*\r\n\tfrom\r\n\t(\r\n\tselect \r\n\tP.ProductID As 'C\u00f3d. Producto',\r\n\tP.ProductName As 'Descripci\u00f3n',\r\n\tP.CategoryID As 'C\u00f3d. Categor\u00eda',\r\n\tDATENAME(MONTH, O.OrderDate) As 'Mes' ,\r\n\tsum(D.Quantity) As 'Cantidad'\r\n\tfrom dbo.&#91;Order Details] As D \r\n\tjoin dbo.Products As P on D.ProductID = P.ProductID\r\n\tjoin dbo.Orders As O on D.OrderID = O.OrderID\r\n\twhere P.CategoryID in (1,2,3)\r\n\t\tand O.OrderDate between '01\/01\/1997' and '31\/12\/1997'\r\n\tgroup by P.ProductID, P.ProductName, P.CategoryID, DATENAME(MONTH, O.OrderDate)\r\n\t) As T\r\n\tpivot (Sum(T.Cantidad) for T.Mes in \r\n\t\t(&#91;Enero],&#91;Febrero],&#91;Marzo],&#91;Abril],&#91;Mayo],&#91;Junio],\r\n\t\t &#91;Julio],&#91;Agosto],&#91;Septiembre],&#91;Octubre],&#91;Noviembre],&#91;Diciembre])) PVT\r\ngo<\/code><\/pre>\n\n\n\n<p><strong>La imagen muestra el resultado<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_03.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"456\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_03-1024x456.png\" alt=\"\" class=\"wp-image-2843\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_03-1024x456.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_03-300x134.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_03-768x342.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_03-795x354.png 795w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_03.png 1406w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Eliminando los valores Null de la consulta.<\/strong><\/p>\n\n\n\n<p>Para eliminar los valores Null que indican que en ese mes no se han vendido unidades del producto, usaremos Case con la expresi\u00f3n l\u00f3gica de comprobar si el valor es Null.<\/p>\n\n\n\n<pre class=\"wp-block-code has-regular-font-size\"><code>select \r\n\t&#91;C\u00f3d. Producto],\r\n\tDescripci\u00f3n,\r\n\t&#91;C\u00f3d. Categor\u00eda],\r\n\tCase when Enero is not null then Enero Else 0 End As Enero,\r\n\tCase when Febrero is not null then Febrero Else 0 End As Febrero,\r\n\tCase when Marzo is not null then Marzo Else 0 End As Marzo,\r\n\tCase when Abril is not null then Abril Else 0 End As Abril,\r\n\tCase when Mayo is not null then Mayo Else 0 End As Mayo,\r\n\tCase when Junio is not null then Junio Else 0 End As Junio,\r\n\tCase when Julio is not null then Julio Else 0 End As Julio,\r\n\tCase when Agosto is not null then Agosto Else 0 End As Agosto,\r\n\tCase when Septiembre is not null then Septiembre Else 0 End As Septiembre,\r\n\tCase when Octubre is not null then Octubre Else 0 End As Octubre,\r\n\tCase when Noviembre is not null then Noviembre Else 0 End As Noviembre,\r\n\tCase when Diciembre is not null then Diciembre Else 0 End As Diciembre\r\n\tfrom\r\n\t(\r\n\tselect \r\n\tP.ProductID As 'C\u00f3d. Producto',\r\n\tP.ProductName As 'Descripci\u00f3n',\r\n\tP.CategoryID As 'C\u00f3d. Categor\u00eda',\r\n\tDATENAME(MONTH, O.OrderDate) As 'Mes' ,\r\n\tsum(D.Quantity) As 'Cantidad'\r\n\tfrom dbo.&#91;Order Details] As D \r\n\tjoin dbo.Products As P on D.ProductID = P.ProductID\r\n\tjoin dbo.Orders As O on D.OrderID = O.OrderID\r\n\twhere P.CategoryID in (1,2,3)\r\n\t\tand O.OrderDate between '01\/01\/1997' and '31\/12\/1997'\r\n\tgroup by P.ProductID, P.ProductName, P.CategoryID, DATENAME(MONTH, O.OrderDate)\r\n\t) As T\r\n\tpivot (Sum(T.Cantidad) for T.Mes in \r\n\t\t(&#91;Enero],&#91;Febrero],&#91;Marzo],&#91;Abril],&#91;Mayo],&#91;Junio],\r\n\t\t &#91;Julio],&#91;Agosto],&#91;Septiembre],&#91;Octubre],&#91;Noviembre],&#91;Diciembre])) PVT\r\ngo<\/code><\/pre>\n\n\n\n<p>La imagen muestra el resultado<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_04.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"466\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_04-1024x466.png\" alt=\"\" class=\"wp-image-2844\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_04-1024x466.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_04-300x137.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_04-768x350.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_04-795x362.png 795w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_04.png 1370w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Ejercicio 2<\/strong><\/p>\n\n\n\n<p>Crear un listado de la cantidad de \u00f3rdenes atendidas por trimestres del a\u00f1o 1997. Las empresas de env\u00edo o Couriers son los Shippers y las \u00f3rdenes atendidas son las que en el campo ShippedDate no es null.<\/p>\n\n\n\n<pre class=\"wp-block-code has-regular-font-size\"><code>select \r\n\t&#91;C\u00f3d. Courier],\r\n\tCourier,\r\n\t&#91;1] as 'Primer Trimestre',\r\n\t&#91;2] as 'Segundo Trimestre',\r\n\t&#91;3] as 'Tercer Trimestre',\r\n\t&#91;4] as 'Cuarto Trimestre'\r\n\tfrom\r\n\t(\r\n\tselect\r\n\t\tS.ShipperID As 'C\u00f3d. Courier',\r\n\t\tS.CompanyName As 'Courier',\r\n\t\tCOUNT(O.OrderID) As '\u00d3rdenes',\r\n\t\tDATENAME(QUARTER, O.OrderDate) As 'Trimestre'\r\n\t\tfrom dbo.Orders As O\r\n\t\tjoin dbo.Shippers As S on O.ShipVia = S.ShipperID\r\n\t\twhere O.ShippedDate is not null \r\n\t\tand O.OrderDate between '01\/01\/1997' and '31\/12\/1997'\t\r\n\t\tgroup by S.ShipperID, S.CompanyName, DATENAME(QUARTER, O.OrderDate)\r\n\t) As T\r\n\tPivot (sum(T.\u00d3rdenes) for T.Trimestre in (&#91;1],&#91;2],&#91;3],&#91;4])) As PVT\r\ngo<\/code><\/pre>\n\n\n\n<p><strong>La imagen muestra el resultado<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_05.png\"><img loading=\"lazy\" decoding=\"async\" width=\"861\" height=\"182\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_05.png\" alt=\"\" class=\"wp-image-2845\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_05.png 861w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_05-300x63.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_05-768x162.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_05-795x168.png 795w\" sizes=\"auto, (max-width: 861px) 100vw, 861px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Ejercicio 3<\/strong><\/p>\n\n\n\n<p>Listado de los empleados y la cantidad de \u00f3rdenes atendidas que demoraron menos de 10 d\u00edas en atender.<\/p>\n\n\n\n<pre class=\"wp-block-code has-regular-font-size\"><code>select \r\n\t* \r\n\tfrom\r\n\t(\r\n\tSelect \r\n\t\tEmpleado = E.LastName + Space(1) + E.FirstName, YEAR(O.OrderDate) As 'A\u00f1o',\r\n\t\tCOUNT(O.OrderID) As '\u00d3rdenes'\r\n\t\tfrom Employees As E\r\n\t\tjoin Orders As O on E.EmployeeID = O.EmployeeID\r\n\t\twhere DATEDIFF(DAY,O.OrderDate, O.ShippedDate) &lt;10\r\n\t\t\tand O.ShippedDate is not null\r\n\t\tGroup by E.LastName + Space(1) + E.FirstName, YEAR(O.OrderDate) \r\n\t) As T\r\n\tpivot (Sum(\u00d3rdenes) for A\u00f1o in (&#91;1996],&#91;1997],&#91;1998])) As Calculos\r\ngo<\/code><\/pre>\n\n\n\n<p>La imagen muestra el resultado<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_06.png\"><img loading=\"lazy\" decoding=\"async\" width=\"494\" height=\"328\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_06.png\" alt=\"\" class=\"wp-image-2846\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_06.png 494w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_06-300x199.png 300w\" sizes=\"auto, (max-width: 494px) 100vw, 494px\" \/><\/a><\/figure>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Ejercicio 4<\/strong><\/p>\n\n\n\n<p>Listado de clientes de un determinado pa\u00eds, la cantidad de \u00f3rdenes y el monto total de estas agrupados por a\u00f1o. Se va a crear una funci\u00f3n definida por el usuario (Ver Funciones definidas por el usuario) para el c\u00e1lculo del total de la orden y crear un procedimiento almacenado que reciba el pa\u00eds para el listado de los clientes<\/p>\n\n\n\n<p><strong>La funci\u00f3n definida por el usuario para el total de la orden<\/strong><br>Create or alter function dbo.fduTotalMontoOrden (@IdOrden int)<br>returns Numeric(19,2)<br>As<br>Begin<br>Declare @Total Numeric(19,2)<br>set @Total =<br>(select Sum((Od.UnitPrice * OD.Quantity)*(1-Od.Discount))<br>from dbo.[Order Details] As Od where Od.OrderID = @IdOrden )<br>return @Total<br>End<br>go<\/p>\n\n\n\n<p><strong>El listado de los clientes de Argentina, pa\u00eds que se toma como ejemplo.<\/strong><br>select<br>C.CompanyName As &#8216;Cliente&#8217;,<br>DATEPART(YY,O.OrderDate) As &#8216;A\u00f1o&#8217;,<br>sum(dbo.fduTotalMontoOrden(O.OrderID)) As &#8216;Importe&#8217;<br>from dbo.Customers as C<br>join dbo.Orders as O on C.CustomerID = O.CustomerID<br>where C.Country = &#8216;Argentina&#8217;<br>group by C.CompanyName, DATEPART(YY,O.OrderDate)<br>go<br>La imagen muestra el resultado, realmente son tres clientes y se notan las compras en los diferentes a\u00f1os.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_07.png\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"268\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_07.png\" alt=\"\" class=\"wp-image-2847\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_07.png 576w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_07-300x140.png 300w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><\/a><\/figure>\n\n\n\n<p><strong>Creando la consulta con la cl\u00e1usula Pivot como referencia cruzada<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code has-regular-font-size\"><code>select\r\n\tR.Cliente,\r\n\tCase when R.&#91;1996] is not null then R.&#91;1996] else 0 end As &#91;1996],\r\n\tCase when R.&#91;1997] is not null then R.&#91;1997] else 0 end As &#91;1997],\r\n\tCase when R.&#91;1998] is not null then R.&#91;1998] else 0 end As &#91;1998]\r\n\tfrom\r\n\t(\r\n\tselect \r\n\t\tC.CompanyName As 'Cliente',\r\n\t\tDATEPART(YY,O.OrderDate) As 'A\u00f1o',\r\n\t\tsum(dbo.fduTotalMontoOrden(O.OrderID)) As 'Importe'\r\n\t\tfrom dbo.Customers as C\r\n\t\tjoin dbo.Orders as O on C.CustomerID = O.CustomerID\r\n\t\twhere C.Country = 'Argentina'\r\n\t\tgroup by C.CompanyName, DATEPART(YY,O.OrderDate)\r\n\t) As T\r\n\tpivot (sum(T.Importe) for A\u00f1o in (&#91;1996],&#91;1997],&#91;1998])) As R\r\ngo<\/code><\/pre>\n\n\n\n<p><strong>La imagen muestra el resultado<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_08.png\"><img loading=\"lazy\" decoding=\"async\" width=\"586\" height=\"193\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_08.png\" alt=\"\" class=\"wp-image-2848\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_08.png 586w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_08-300x99.png 300w\" sizes=\"auto, (max-width: 586px) 100vw, 586px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Creando el Procedimiento almacenado, este procedimiento recibe el nombre del pa\u00eds como par\u00e1metro.<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code has-regular-font-size\"><code>Create or alter procedure dbo.spClientesPorPaisMontoCompras\r\n\t(\r\n\t@Pais nvarchar(15)\r\n\t)\r\n\tAs\r\n\tselect\r\n\t\tR.Cliente,\r\n\t\tCase when R.&#91;1996] is not null then R.&#91;1996] else 0 end As &#91;1996],\r\n\t\tCase when R.&#91;1997] is not null then R.&#91;1997] else 0 end As &#91;1997],\r\n\t\tCase when R.&#91;1998] is not null then R.&#91;1998] else 0 end As &#91;1998]\r\n\t\tfrom\r\n\t\t(\r\n\t\tselect \r\n\t\t\tC.CompanyName As 'Cliente',\r\n\t\t\tDATEPART(YY,O.OrderDate) As 'A\u00f1o',\r\n\t\t\tsum(dbo.fduTotalMontoOrden(O.OrderID)) As 'Importe'\r\n\t\t\tfrom dbo.Customers as C\r\n\t\t\tjoin dbo.Orders as O on C.CustomerID = O.CustomerID\r\n\t\t\twhere C.Country = @Pais\r\n\t\t\tgroup by C.CompanyName, DATEPART(YY,O.OrderDate)\r\n\t\t) As T\r\n\t\tpivot (sum(T.Importe) for A\u00f1o in (&#91;1996],&#91;1997],&#91;1998])) As R\r\ngo<\/code><\/pre>\n\n\n\n<p>Mostrando los clientes de Argentina<br>Execute dbo.spClientesPorPaisMontoCompras &#8216;Argentina&#8217;<br>go<\/p>\n\n\n\n<p>Los clientes de Mexico<br>Execute dbo.spClientesPorPaisMontoCompras &#8216;Mexico&#8217;<br>go<br>La imagen muestra el resultado<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_09.png\"><img loading=\"lazy\" decoding=\"async\" width=\"776\" height=\"248\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_09.png\" alt=\"\" class=\"wp-image-2850\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_09.png 776w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_09-300x96.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_09-768x245.png 768w\" sizes=\"auto, (max-width: 776px) 100vw, 776px\" \/><\/a><\/figure>\n\n\n\n<p>Listado de los clientes de Mexico<br>select CustomerID, CompanyName, Country<br>from dbo.Customers where Country = &#8216;Mexico&#8217;<br>go<br>La imagen muestra el resultado<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"525\" height=\"250\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_10.png\" alt=\"\" class=\"wp-image-2849\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_10.png 525w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2023\/09\/MaualSQL_Pivot-ReferenciaCruzada_10-300x143.png 300w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Pivot y tablas de referencia cruzada Las operaciones con la cl\u00e1usula Pivot nos permite convertir los resultados de una consulta que se muestra en filas y transponer los resultados en columnas. Pivot utiliza las funciones de agregado para presentar los datos en columnas.<\/p><p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=2839\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":2840,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,8],"tags":[48,299,227],"class_list":["post-2839","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-consultasdedatos","category-programacion","tag-pivot","tag-referencia-cruzada","tag-unpivot","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2839","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2839"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2839\/revisions"}],"predecessor-version":[{"id":2851,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2839\/revisions\/2851"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/2840"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2839"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2839"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2839"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}