{"id":2466,"date":"2021-01-04T19:09:15","date_gmt":"2021-01-04T19:09:15","guid":{"rendered":"http:\/\/manualsqlserver.com\/?p=2466"},"modified":"2021-01-04T19:09:17","modified_gmt":"2021-01-04T19:09:17","slug":"select-for-xml-path-sql-server","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=2466","title":{"rendered":"Select For XML Path SQL Server"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath__D.png\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"260\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath__D.png\" alt=\"\" class=\"wp-image-2467\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Uso de For XML Path en SQL Server<\/h2>\n\n\n\n<p>Una consulta Select (Ver Select) se puede mostrar en formato XML (Ver Campos XML), utilizando la opci\u00f3n FOR XML, la cual tiene varios modos, uno de estos es el modo PATH.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p style=\"font-size:24px\"><strong>Presentando los registros usando For XML Path<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Al usar esta opci\u00f3n se pueden extraer los datos de una consulta en formato XML, el que es muy<\/strong> <strong>necesario en muchas aplicaciones.<\/strong><\/li><li><strong>Los nombres de campos o los alias de la consulta se van a convertir en etiquetas XML<\/strong><\/li><li><strong>Proporciona una forma sencilla de mostrar los elementos de un campo de una tabla separados por<\/strong> <strong>un caracter que generalmente es la coma.<\/strong><\/li><li><strong>El modo PATH de la opci\u00f3n For XML es una forma sencilla de introducir un anidamiento adicional<\/strong> <strong>para representar propiedades complejas.<\/strong><\/li><\/ul>\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 style=\"font-size:26px\"><strong>Ejercicios<\/strong><\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>Ejercicio 1<\/strong><\/p>\n\n\n\n<p><strong>Usando la base de datos Northwind<br><\/strong>use Northwind<br>go<br><strong>Listar los proveedores (Suppliers) en formato XML<br><\/strong>Select * from Suppliers for xml path<br>go<br><strong>El resultado se muestra en la siguiente imagen<br><\/strong>Note que es tiene formato XML<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_01.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_01.png\" alt=\"\" class=\"wp-image-2468\" width=\"746\" height=\"182\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_01.png 687w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_01-300x73.png 300w\" sizes=\"auto, (max-width: 746px) 100vw, 746px\" \/><\/a><\/figure>\n\n\n\n<p>Al pulsar clic sobre el archivo se muestra el contenido de la tabla Suppliers (Proveedores) en formato XML, para cada registro de la tabla la opci\u00f3n For XML Path le incluye la etiqueta row.<br><strong>El resultado se muestra en la siguiente imagen<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_02.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_02.png\" alt=\"\" class=\"wp-image-2469\" width=\"745\" height=\"667\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_02.png 753w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_02-300x269.png 300w\" sizes=\"auto, (max-width: 745px) 100vw, 745px\" \/><\/a><\/figure>\n\n\n\n<p style=\"font-size:24px\"><strong>Ejercicio 2<\/strong><\/p>\n\n\n\n<p><strong>Mostrar las categor\u00edas<\/strong><br>Select<br>C.CategoryID As &#8216;C\u00f3digo&#8217;,<br>C.CategoryName As &#8216;Categor\u00eda&#8217;,<br>C.Description As &#8216;Descripci\u00f3n&#8217;<br>from Categories As C for xml path<br>go<br><strong>Al pulsar clic en el enlace para abrir el archivo XML se muestran etiquetas XML de acuerdo a los alias utilizados en la b\u00fasqueda<br>El resultado se muestra en la siguiente imagen<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_03.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_03-1024x799.png\" alt=\"\" class=\"wp-image-2470\" width=\"729\" height=\"568\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_03-1024x799.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_03-300x234.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_03-768x599.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_03-795x620.png 795w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_03.png 1086w\" sizes=\"auto, (max-width: 729px) 100vw, 729px\" \/><\/a><\/figure>\n\n\n\n<p style=\"font-size:24px\"><strong>Ejercicio 3<\/strong><\/p>\n\n\n\n<p><strong>Mostrar los empleados, para cada registro se ha especificado la etiqueta Empleado, utilizando la cl\u00e1usula Path.<br><\/strong>Select<br>E.EmployeeID As &#8216;C\u00f3digo&#8217;,<br>E.LastName As &#8216;Apellido&#8217;,<br>E.FirstName As &#8216;Nombre&#8217;,<br>E.Country As &#8216;Pa\u00eds&#8217;<br>from Employees As E for xml path(&#8216;<strong>Empleado<\/strong>&#8216;)<br>go<br><strong>Al pulsar clic en el enlace para abrir el archivo XML se muestran etiquetas XML de acuerdo a los alias utilizados en la b\u00fasqueda, note que cada empleado tiene la etiqueta XML especificada en la cl\u00e1usula Path. Si dentro de los par\u00e9ntesis en la cl\u00e1usula Path se especifica una cadena de caracteres vacia Path(\u00bb), los registros no se separan.<br>El resultado se muestra en la siguiente imagen<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_04.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_04.png\" alt=\"\" class=\"wp-image-2471\" width=\"685\" height=\"1021\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_04.png 563w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_04-201x300.png 201w\" sizes=\"auto, (max-width: 685px) 100vw, 685px\" \/><\/a><\/figure>\n\n\n\n<p style=\"font-size:24px\"><strong>Ejercicio 4<\/strong><\/p>\n\n\n\n<p><strong>Mostrar los productos, el c\u00f3digo del productos se va a especificar como una propiedad de la etiqueta Producto.<br><\/strong>select<br>P.ProductID As &#8216;@C\u00f3digo&#8217;,<br>P.ProductName As &#8216;Descripci\u00f3n&#8217;,<br>P.UnitPrice As &#8216;Precio&#8217;,<br>P.UnitsInStock As &#8216;Stock&#8217;<br>From Products As P<br>for xml path (&#8216;Producto&#8217;)<br>go<br><strong>El resultado se muestra en la siguiente imagen<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_05.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_05.png\" alt=\"\" class=\"wp-image-2472\" width=\"736\" height=\"659\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_05.png 782w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_05-300x269.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_05-768x688.png 768w\" sizes=\"auto, (max-width: 736px) 100vw, 736px\" \/><\/a><\/figure>\n\n\n\n<p><strong>En el listado anterior se puede incluir un nivel superior para agrupar los productos usando la cl\u00e1usula Root<br><\/strong>select<br>P.ProductID As &#8216;@C\u00f3digo&#8217;,<br>P.ProductName As &#8216;Descripci\u00f3n&#8217;,<br>P.UnitPrice As &#8216;Precio&#8217;,<br>P.UnitsInStock As &#8216;Stock&#8217;<br>From Products As P<br>for xml path (&#8216;Producto&#8217;), root (&#8216;Productos&#8217;)<br>go<br><strong>El resultado se muestra en la siguiente imagen<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_06.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_06.png\" alt=\"\" class=\"wp-image-2473\" width=\"733\" height=\"704\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_06.png 756w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_06-300x288.png 300w\" sizes=\"auto, (max-width: 733px) 100vw, 733px\" \/><\/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 style=\"font-size:24px\"><strong>Ejercicio 5<\/strong><\/p>\n\n\n\n<p><strong>Este ejercicio va a mostrar como usar la opci\u00f3n For XML Path para generar un conjunto de valores separados por coma con los datos de una columna. El diagrama siguiente muestra la programaci\u00f3n de cursos de capacitaci\u00f3n de un sistema para un centro de certificaci\u00f3n.<\/strong><\/p>\n\n\n\n<p>Create database Capacitacion<br>go<br>use Capacitacion<br>go<br>Create table Cursos<br>(<br>Codigo nchar(5),<br>Descripcion nvarchar(50) not null,<br>Ambiente nvarchar(50),<br>HoraInicio Time,<br>CantidadHoras Numeric(9,2),<br>DiaSemana nvarchar(10),<br>constraint CursosPK primary key (Codigo)<br>)<br>go<br>Insertar los cursos<br>insert into Cursos values<br>(&#8216;SS005&#8242;,&#8217;SQL Server DBA&#8217;,&#8217;Aula DBA&#8217;,&#8217;8:00&#8242;,4,&#8217;Lunes&#8217;),<br>(&#8216;SS151&#8242;,&#8217;SQL Server DBA&#8217;,&#8217;Aula DBA&#8217;,&#8217;8:00&#8242;,4,&#8217;Mi\u00e9rcoles&#8217;),<br>(&#8216;SS645&#8242;,&#8217;SQL Server DBA&#8217;,&#8217;Aula DBA&#8217;,&#8217;8:00&#8242;,4,&#8217;Viernes&#8217;),<br>(&#8216;SS890&#8242;,&#8217;SQL Server DBA&#8217;,&#8217;Aula DBA&#8217;,&#8217;8:00&#8242;,4,&#8217;S\u00e1bado&#8217;),<br>(&#8216;OE045&#8242;,&#8217;Experto MOS 2019&#8242;,&#8217;Aula Office&#8217;,&#8217;4:00&#8242;,3,&#8217;Martes&#8217;),<br>(&#8216;OE109&#8242;,&#8217;Experto MOS 2019&#8242;,&#8217;Aula Office&#8217;,&#8217;4:00&#8242;,3,&#8217;Jueves&#8217;),<br>(&#8216;OE456&#8242;,&#8217;Experto MOS 2019&#8242;,&#8217;Aula Office&#8217;,&#8217;4:00&#8242;,3,&#8217;S\u00e1bado&#8217;)<br>go<\/p>\n\n\n\n<p><strong>El listado de los cursos es como sigue<br><\/strong>select * from Cursos<br>go<br><strong>El resultado se muestra en la siguiente imagen<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_07.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_07.png\" alt=\"\" class=\"wp-image-2474\" width=\"731\" height=\"257\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_07.png 763w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_07-300x106.png 300w\" sizes=\"auto, (max-width: 731px) 100vw, 731px\" \/><\/a><\/figure>\n\n\n\n<p>Se desea mostrar las ofertas de los cursos y los d\u00edas de la semana separados por coma.<br>Para esto se va a usar una subconsulta (<strong><a rel=\"noreferrer noopener\" href=\"https:\/\/manualsqlserver.com\/?p=219\" target=\"_blank\">Ver SubConsultas<\/a><\/strong>) de los d\u00edas de la semana separados por coma. La funci\u00f3n Stuff quita la coma al inicio del resultado (<a rel=\"noreferrer noopener\" href=\"https:\/\/manualsqlserver.com\/?p=188\" target=\"_blank\">Ver funciones de texto<\/a>)<br>select Stuff((select &#8216;,&#8217;+ C.DiaSemana<br>from Cursos As C for xml path(\u00bb)),1,1,\u00bb) As &#8216;D\u00eda&#8217;<br>go<br><strong>El resultado se muestra en la siguiente imagen<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_08.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_08.png\" alt=\"\" class=\"wp-image-2475\" width=\"781\" height=\"231\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_08.png 515w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_08-300x89.png 300w\" sizes=\"auto, (max-width: 781px) 100vw, 781px\" \/><\/a><\/figure>\n\n\n\n<p><strong>Ahora vamos a listar los cursos con los d\u00edas de la semana<br><\/strong>select distinct<br>C.Descripcion, C.Ambiente,<br>C.HoraInicio ,C.CantidadHoras,<br>(select Stuff((select &#8216;,&#8217;+DiaSemana from Cursos As D<br>where D.Descripcion = C.Descripcion<br>for xml path(\u00bb)),1,1,\u00bb)) As &#8216;D\u00edas&#8217;<br>from Cursos As C<br>go<br><strong>El resultado se muestra en la siguiente imagen<br>Note que los d\u00edas de la semana que se ofertan los cursos aparecen separados por coma.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_09.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_09.png\" alt=\"\" class=\"wp-image-2476\" width=\"862\" height=\"163\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_09.png 864w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_09-300x57.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_09-768x146.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_09-795x151.png 795w\" sizes=\"auto, (max-width: 862px) 100vw, 862px\" \/><\/a><\/figure>\n\n\n\n<p style=\"font-size:24px\"><strong>Ejercicio 6<\/strong><\/p>\n\n\n\n<p><strong>Usando la base de datos Northwind<br><\/strong>use Northwind<br>go<br><strong>Listar los empleados y las \u00f3rdenes generadas. (<a href=\"https:\/\/manualsqlserver.com\/?p=215\" target=\"_blank\" rel=\"noreferrer noopener\">Ver Joins<\/a>)<br><\/strong>Select Distinct<br>E.LastName As &#8216;Apellidos&#8217;, E.FirstName As &#8216;Nombre&#8217;,<br>Stuff((Select &#8216;,&#8217;+ trim(Str(O.OrderID)) from Orders As O<br>where O.EmployeeID = E.EmployeeID<br>For XML path(\u00bb)),1,1,\u00bb) As &#8216;Ordenes&#8217;<br>from Employees As E<br>join Orders As O on E.EmployeeID = O.EmployeeID<br>go<br><strong>El resultado se muestra en la siguiente imagen<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_10.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_10-1024x286.png\" alt=\"\" class=\"wp-image-2477\" width=\"881\" height=\"245\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_10-1024x286.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_10-300x84.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_10-768x215.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_10-795x222.png 795w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_10.png 1181w\" sizes=\"auto, (max-width: 881px) 100vw, 881px\" \/><\/a><\/figure>\n\n\n\n<p style=\"font-size:24px\"><strong>Ejercicio 7<\/strong><\/p>\n\n\n\n<p><strong>Listar los Proveedores y los productos que provee<br><\/strong>Select Distinct<br>S.CompanyName As &#8216;Proveedor&#8217;, S.Country As &#8216;Pa\u00eds&#8217;,<br>Stuff((Select &#8216;,&#8217;+ P.ProductName from Products As P<br>where P.SupplierID= S.SupplierID<br>For XML path(\u00bb)),1,1,\u00bb) As &#8216;Productos&#8217;<br>from Suppliers As S<br>join Products As P on S.SupplierID= P.SupplierID<br>order by Proveedor<br>go<br><strong>El resultado se muestra en la siguiente imagen<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_11.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_11-1024x744.png\" alt=\"\" class=\"wp-image-2478\" width=\"776\" height=\"564\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_11-1024x744.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_11-300x218.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_11-768x558.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_11-795x578.png 795w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_11.png 1135w\" sizes=\"auto, (max-width: 776px) 100vw, 776px\" \/><\/a><\/figure>\n\n\n\n<p><strong>Esto se puede mostrar tambi\u00e9n usando la funci\u00f3n String_agg de SQL Server 2017 (Ver <a href=\"https:\/\/manualsqlserver.com\/?p=1863\" target=\"_blank\" rel=\"noreferrer noopener\">Funciones Trim, Concat_ws y String_agg<\/a>)<br><\/strong>Select Distinct<br>S.CompanyName As &#8216;Proveedor&#8217;, S.Country As &#8216;Pa\u00eds&#8217;,<br>String_agg(P.ProductName,&#8217;,&#8217;)<br>within group (order by P.ProductName asc)<br>As &#8216;Productos&#8217;<br>from Suppliers As S<br>join Products As P on S.SupplierID= P.SupplierID<br>Group by S.CompanyName, S.Country<br>order by Proveedor<br>go<br><strong>El resultado es id\u00e9ntico al de la orden anterior.<\/strong><\/p>\n\n\n\n<p><strong>Si compara los costos usando el plan de ejecuci\u00f3n estimado puede notar que para este ejemplo es algo m\u00e1s r\u00e1pido el uso de String_agg.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_12.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_12-1024x403.png\" alt=\"\" class=\"wp-image-2479\" width=\"779\" height=\"306\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_12-1024x403.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_12-300x118.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_12-768x302.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_12-795x313.png 795w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_12.png 1389w\" sizes=\"auto, (max-width: 779px) 100vw, 779px\" \/><\/a><figcaption>Costo usando For XML Path<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_13.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_13.png\" alt=\"\" class=\"wp-image-2480\" width=\"787\" height=\"479\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_13.png 888w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_13-300x183.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_13-768x468.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/01\/ManualSQL_ForXMLPath_13-795x484.png 795w\" sizes=\"auto, (max-width: 787px) 100vw, 787px\" \/><\/a><figcaption>Costo usando String_agg<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Uso de For XML Path en SQL Server Una consulta Select (Ver Select) se puede mostrar en formato XML (Ver Campos XML), utilizando la opci\u00f3n FOR XML, la cual tiene varios modos, uno de estos es el modo PATH.<\/p><p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=2466\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":2467,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[280,51],"class_list":["post-2466","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-consultasdedatos","tag-for-xml-path","tag-select","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2466","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=2466"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2466\/revisions"}],"predecessor-version":[{"id":2481,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2466\/revisions\/2481"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/2467"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2466"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2466"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2466"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}