0% encontró este documento útil (0 votos)
659 vistas3 páginas

Concatenación en SQL con STUFF y FOR XML

Este documento explica cómo concatenar filas de una tabla en una sola fila utilizando las funciones FOR XML PATH y STUFF en SQL Server. Proporciona ejemplos de cómo usar estas funciones para concatenar nombres en una cadena y obtener una lista de productos asociados a cada oferta especial desde varias tablas relacionadas.

Cargado por

Alan Salazar
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
659 vistas3 páginas

Concatenación en SQL con STUFF y FOR XML

Este documento explica cómo concatenar filas de una tabla en una sola fila utilizando las funciones FOR XML PATH y STUFF en SQL Server. Proporciona ejemplos de cómo usar estas funciones para concatenar nombres en una cadena y obtener una lista de productos asociados a cada oferta especial desde varias tablas relacionadas.

Cargado por

Alan Salazar
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

CONCATENAR USANDO FOR XML PATH Y STUFF

2013/04/16 15:37:00   sergio sanchez arias


En el foro de SQL SERVER se cuestiona mucho como concatenar varias filas en una sola,
sobre todo esto se utiliza para evitar el uso de los cursores y es mucho más rápido, para
comenzar es necesario la tabla AdventureWorks2012.

1 SELECT TOP 10 FirstName
2 FROM AdventureWorks2012.Person.Person

Hasta aquí no hay nada, digámoslo de cierta forma, nuevo, pero para poder hacer la
concatenación requerimos de la función STUFF y la clausula FOR XML utilizando el
modo PATH.
La función STUFF sirve para ingresar una cadena en otra a partir de los parámetros de
posición y longitud. Siendo de esta manera, el siguiente ejemplo:

1 SELECT TOP 10 FirstName, STUFF( FirstName, 3,2,'CADENA') as resultado


2 FROM AdventureWorks2012.Person.Person
Lo que nos arroja como resultado:

Y para que funciona FOR XML PATH , para devolver una consulta en formato XML, este
es el resultado de una consulta a la base de datos AdventureWorks2012:

1 SELECT TOP 3 FirstName, MiddleName, LastName LastName


2 FROM AdventureWorks2012.Person.Person
3 FOR XML PATH

Y si damos click al resultado, nos muestra esto:

Si agregamos el parámetro, reemplazara el atributo de fila:

1 SELECT TOP 3 FirstName, MiddleName, LastName LastName


2 FROM AdventureWorks2012.Person.Person
3 FOR XML PATH('FILA')

Y que pasa si establecemos un valor vacío?:

Combinando STUFF y FOR XML PATH, podemos lograr concatenar las filas.

1 SELECT STUFF((
2        SELECT TOP 10 ','+FirstName
3        FROM AdventureWorks2012.Person.Person
4        FOR XML PATH('')
5 ),1,1, '')

Y de esta manera es posible agrupar a un nivel superior:

1 SELECT
2        PC.Name
3        ,STUFF((
4              SELECT ','+name
5              FROM Production.ProductSubcategory PSC
6              WHERE PSC.ProductCategoryID = PC.ProductCategoryID
7              FOR XML PATH('')
8        ),1,1,'')
9 FROM Production.ProductCategory PC

Algo más complejo, observemos las


tablas Sales.SpecialOffer, Sales.SpecialOfferProduct,Production.Product, la primera
contiene las ofertas especiales( como su nombre lo indica), la segunda tabla contiene el
detallado de los productos que por cada oferta especial y la tercera el detallado de los
productos. Lo que queremos obtener es todos los productos de cada oferta especial:

Sales.SpecialOffer:

Sales.SpecialOfferProduct:

Production.Product

La consulta quedaría así:

01 SELECT SO.SpecialOfferID, SO.Description
02 , STUFF((

03        SELECT ','+p.Name
04        FROM sales.SpecialOfferProduct SOP
05        INNER JOIN Production.Product P
06        ON SOP.ProductID = p.ProductID
07        AND SOP.SpecialOfferID = SO.SpecialOfferID
08        FOR XML PATH('')

09 ),1,1,'' ) as productos
10 FROM Sales.SpecialOffer SO

Una forma muy practica y mucho mejor para concatenar valores en comparación que si
utilizaramos un cursor.

Espero que les sirva.

http://chancrovsky.blogspot.pe/2013/04/concatenar-usando-for-xml-path-y-stuff.html

También podría gustarte