{"id":2650,"date":"2022-08-03T18:44:20","date_gmt":"2022-08-03T18:44:20","guid":{"rendered":"https:\/\/manualsqlserver.com\/?p=2650"},"modified":"2022-08-03T18:45:07","modified_gmt":"2022-08-03T18:45:07","slug":"funcion-row_number-en-sql-server","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=2650","title":{"rendered":"Funci\u00f3n Row_Number en SQL Server"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number__D.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number__D.png\" alt=\"\" class=\"wp-image-2651\" width=\"220\" height=\"260\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Funci\u00f3n Row_Number en SQL Server<\/strong><\/h2>\n\n\n\n<p>Enumera la lista de registros resultantes en una instrucci\u00f3n Select.<br>Puede especificarse una columna como particionamiento de los resultados y debe especificarse de manera obligatoria un campo por el que se ordenar\u00e1n los registros resultantes.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p><strong>Sintaxis:<br><\/strong>ROW_NUMBER ()<br>OVER ( [ Partition by Campo1 , \u2026 [ n ] ] Order by [Campo1, Campo2,\u2026] )<\/p>\n\n\n\n<p><strong>Usando la base de datos Northwind<br><\/strong>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>Listado de los productos, ordenados por unidades en Stock descendente.<br>Note que se ha incluido la cl\u00e1usula Order by.<br>select<br>ROW_NUMBER() over (order by P.UnitsInStock desc) As &#8216;Orden&#8217;,<br>P.ProductName,<br>P.QuantityPerUnit,<br>P.UnitPrice,<br>P.UnitsInStock<br>from dbo.Products As P<br>order by P.UnitsInStock desc<br>go<br>El resultado se muestra en la siguiente imagen.<\/p>\n\n\n\n<p>Los valores de la columna <strong>Orden <\/strong>son mostrados usando la funci\u00f3n Row_Number<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_01.png\"><img loading=\"lazy\" decoding=\"async\" width=\"739\" height=\"675\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_01.png\" alt=\"\" class=\"wp-image-2652\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_01.png 739w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_01-300x274.png 300w\" sizes=\"auto, (max-width: 739px) 100vw, 739px\" \/><\/a><\/figure>\n\n\n\n<script async=\"\" src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\" style=\"display:block; text-align:center;\" data-ad-layout=\"in-article\" data-ad-format=\"fluid\" data-ad-client=\"ca-pub-2636008503986218\" data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script<\/script>\n\n\n\n<p><strong>En el ejercicio anterior, no es necesario ordenar<br><\/strong>select<br>ROW_NUMBER() over (order by P.UnitsInStock desc) As 'Orden',<br>P.ProductName,<br>P.QuantityPerUnit,<br>P.UnitPrice,<br>P.UnitsInStock<br>from dbo.Products As P<br>go<\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Ejercicio 2<\/strong><\/p>\n\n\n\n<p>Listado de productos ordenados por unidades en stock en cada categor\u00eda.<br>select<br>ROW_NUMBER() over (partition by P.categoryid order by P.UnitsInStock desc) As 'Orden',<br>P.ProductName,<br>P.QuantityPerUnit,<br>P.UnitPrice,<br>P.UnitsInStock,<br>C.CategoryName<br>from dbo.Products As P<br>join dbo.Categories As C on P.CategoryID = C.CategoryID<br>go<br>El resultado se muestra en la siguiente imagen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_02.png\"><img loading=\"lazy\" decoding=\"async\" width=\"849\" height=\"779\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_02.png\" alt=\"\" class=\"wp-image-2653\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_02.png 849w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_02-300x275.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_02-768x705.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_02-795x729.png 795w\" sizes=\"auto, (max-width: 849px) 100vw, 849px\" \/><\/a><\/figure>\n\n\n\n<p>Note en la imagen que se ordena primero por nombre de la categor\u00eda y los productos de la misma categor\u00eda se ordenan por Stock en orden descendente.  Puede verse la numeraci\u00f3n de la funci\u00f3n Row_Number que se reinicia en cada categor\u00eda.<\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Ejercicio 3<\/strong><\/p>\n\n\n\n<p><strong>Ordenamiento por m\u00e1s de un campo<\/strong><br>Listado de los productos ordenados por ID de la categor\u00eda, luego los que sean<br>de la misma categor\u00eda los ordena primero por unidades en Stock y luego por precio.<br>select<br>ROW_NUMBER() over (partition by P.categoryid<br>order by P.UnitsInStock desc, P.unitPrice desc) As 'Orden',<br>C.CategoryID As 'Id. Categor\u00eda',<br>C.CategoryName,<br>P.ProductName,<br>P.QuantityPerUnit,<br>P.UnitPrice,<br>P.UnitsInStock<br>from dbo.Products As P<br>join dbo.Categories As C on P.CategoryID = C.CategoryID<br>go<br>El resultado se muestra en la siguiente imagen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_03.png\"><img loading=\"lazy\" decoding=\"async\" width=\"976\" height=\"775\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_03.png\" alt=\"\" class=\"wp-image-2654\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_03.png 976w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_03-300x238.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_03-768x610.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_03-795x631.png 795w\" sizes=\"auto, (max-width: 976px) 100vw, 976px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Ejercicio 4<\/strong><\/p>\n\n\n\n<p><strong>Empleados y cantidad de \u00f3rdenes<br><\/strong>select<br>ROW_NUMBER() over (order by Count(O.OrderID) desc) As 'Posici\u00f3n',<br>Empleado = E.LastName + SPACE(1) + E.FirstName,<br>Count(O.OrderID) As 'Cantidad de \u00d3rdenes',<br>Sum(O.Freight) As 'Monto total'<br>from Orders As O<br>join Employees As E on O.EmployeeID = E.EmployeeID<br>Group by E.LastName + SPACE(1) + E.FirstName<br>go<br>El resultado se muestra en la siguiente imagen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_04.png\"><img loading=\"lazy\" decoding=\"async\" width=\"601\" height=\"318\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_04.png\" alt=\"\" class=\"wp-image-2655\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_04.png 601w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_04-300x159.png 300w\" sizes=\"auto, (max-width: 601px) 100vw, 601px\" \/><\/a><\/figure>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Ejercicio 5<\/strong><\/p>\n\n\n\n<p><strong>Categor\u00edas y cantidad de productos<br><\/strong>Select<br>ROW_NUMBER() over (order by Count(P.CategoryID) desc) As 'Posici\u00f3n',<br>C.CategoryID As 'C\u00f3digo',<br>C.CategoryName As 'Categor\u00eda',<br>Count(P.CategoryID) As 'Cantidad de Productos'<br>from Categories As C<br>join Products As P on C.CategoryID = P.CategoryID<br>group by C.CategoryID, C.CategoryName<br>go<br>El resultado se muestra en la siguiente imagen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_05.png\"><img loading=\"lazy\" decoding=\"async\" width=\"518\" height=\"307\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_05.png\" alt=\"\" class=\"wp-image-2656\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_05.png 518w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_05-300x178.png 300w\" sizes=\"auto, (max-width: 518px) 100vw, 518px\" \/><\/a><\/figure>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Ejercicio 6<\/strong><\/p>\n\n\n\n<p><strong>Productos y la cantidad vendida, solamente de aquellos productos que se<br>vendieron mas de 600 unidades de las categor\u00edas 3,5,6 y 8<\/strong><br>select<br>ROW_NUMBER() over (order by C.CategoryID asc,<br>SUM(OD.Quantity) desc) As 'Posici\u00f3n',<br>P.ProductID As 'C\u00f3d. Producto',<br>P.ProductName As 'Descripci\u00f3n',<br>SUM(OD.Quantity) As 'Cantidad Vendida',<br>C.CategoryID As 'C\u00f3d. Categor\u00eda',<br>C.CategoryName As 'Nombre Categor\u00eda'<br>from Products As P<br>join [Order Details] As OD on P.ProductID = OD.ProductID<br>join Categories As C on P.CategoryID = C.CategoryID<br>where C.CategoryID in (3,5,6,8)<br>Group by P.ProductID, P.ProductName, C.CategoryID, C.CategoryName<br>Having SUM(OD.Quantity) &gt; 600<br>go<br>El resultado se muestra en la siguiente imagen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_06.png\"><img loading=\"lazy\" decoding=\"async\" width=\"943\" height=\"608\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_06.png\" alt=\"\" class=\"wp-image-2657\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_06.png 943w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_06-300x193.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_06-768x495.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_06-795x513.png 795w\" sizes=\"auto, (max-width: 943px) 100vw, 943px\" \/><\/a><\/figure>\n\n\n\n<script async=\"\" src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\" style=\"display:block; text-align:center;\" data-ad-layout=\"in-article\" data-ad-format=\"fluid\" data-ad-client=\"ca-pub-2636008503986218\" data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script<\/script>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Ejercicio 7<\/strong><\/p>\n\n\n\n<p><strong>El mismo listado del ejercicio anterior pero particionado por categor\u00eda<br><\/strong>select<br>ROW_NUMBER() over (<br>Partition by C.CategoryID<br>order by C.CategoryID asc,<br>SUM(OD.Quantity) desc) As 'Posici\u00f3n',<br>P.ProductID As 'C\u00f3d. Producto',<br>P.ProductName As 'Descripci\u00f3n',<br>SUM(OD.Quantity) As 'Cantidad Vendida',<br>C.CategoryID As 'C\u00f3d. Categor\u00eda',<br>C.CategoryName As 'Nombre Categor\u00eda'<br>from Products As P<br>join [Order Details] As OD on P.ProductID = OD.ProductID<br>join Categories As C on P.CategoryID = C.CategoryID<br>where C.CategoryID in (3,5,6,8)<br>Group by P.ProductID, P.ProductName, C.CategoryID, C.CategoryName<br>Having SUM(OD.Quantity) &gt; 600<br>go<br>El resultado se muestra en la siguiente imagen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_07.png\"><img loading=\"lazy\" decoding=\"async\" width=\"944\" height=\"600\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_07.png\" alt=\"\" class=\"wp-image-2658\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_07.png 944w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_07-300x191.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_07-768x488.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/08\/ManualSQL_FuncionRow_Number_07-795x505.png 795w\" sizes=\"auto, (max-width: 944px) 100vw, 944px\" \/><\/a><\/figure>\n\n\n\n<p>Note que primero aparece los 6 primeros productos de la categor\u00eda Confections,  cuya n\u00fameraci\u00f3n es del 1 al 6, luego los productos de la categor\u00eda Grains\/Cereals cuya numeraci\u00f3n es del 1 al 3. Luego la categor\u00eda Meat\/Poultry, enumerados del 1 al 5 y al final la categor\u00eda Seafood con los valores del 1 al 6.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Funci\u00f3n Row_Number en SQL Server Enumera la lista de registros resultantes en una instrucci\u00f3n Select.Puede especificarse una columna como particionamiento de los resultados y debe especificarse de manera obligatoria un campo por el que se ordenar\u00e1n los registros resultantes.<\/p><p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=2650\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":2651,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[286,285],"class_list":["post-2650","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-funcionessql","tag-funciones-sql-server","tag-row_number","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2650","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=2650"}],"version-history":[{"count":2,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2650\/revisions"}],"predecessor-version":[{"id":2660,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2650\/revisions\/2660"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/2651"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2650"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2650"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2650"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}