0:38 0 0
Eliminar palabras repetidas en SQL

Eliminar palabras repetidas en SQL

  DrUalcman |  julio 22021
¿Alguna vez te has encontrado que tienes una lista de palabras en una columna y necesitas que se muestre sólo una? Un ejemplo, tenemos una lista de palabras comoÑ

Bravo/Alpha/Bravo/Tango/Delta/Bravo/Alpha/Delta

Y lo que necesitamos es que nos quede algo como

Alpha/Bravo/Delta/Tango

Pues este es el truco que os traigo hoy de SQL. Necesitas tener esta otra función para hacer SPLIT en SQL.

La funcion

CREATE FUNCTION RemoveDuplicatesString
(
    @Line nvarchar(MAX),
    @SplitOn nvarchar(5) = ','
)
 RETURNS NVARCHAR(MAX)
AS
--========================================================
-- Author:
-- Create date: <29 June 2021>
-- Description:
--=========================================================
BEGIN
return (
SELECT STUFF((
SELECT distinct concat(@SplitOn , x.Words )
FROM dbo.Split(@Line, @SplitOn) AS x
FOR XML PATH, TYPE).[value](N'.[1]',N'nvarchar(max)'),1,1,N'')
);
END
Un ejemplo de como usarla
DECLARE @List NVARCHAR(MAX), @Delim NVARCHAR(32);
SELECT @List  = N'Bravo/Alpha/Bravo/Tango/Delta/Bravo/Alpha/Delta',
       @Delim = N'/';
select dbo.RemoveDuplicatesString(@List, @delim)
Lo normal es que la uses, por ejemplo, tras hacer que una clumna sea el contenido de una serie de filas con algún campo en común de una consulta. Por ejemplo, quiero tener en una sola columnas todos los números de factura, y en otra todas las fechas comunes a un cliente. Es posible que los número de factura siemrpe sean diferentes, pero la fecha es posible que haya fechas repetidas, pero sólo quieres que se muestre una fecha cada vez separada por coma. Un jemplo de esa consulta podría ser algo así:
select (SELECT cast (invoiceno as varchar) + ','
FROM invoices where orderid = 1
FOR XML PATH('')
) As invoices,
(SELECT cast (date_created as varchar) + ','
FROM invoices where orderid = 1
FOR XML PATH('')
) As dates
Esto nos generaría un resultado, por poner un ejemplo, como:
|invoices |                     dates                            |
|1,2,3,4,5|2021/01/01,2021/01/01,2021/03/05,2021/03/06,2021/03/06|
Al utilizar la tuncion la consulta quedaría como
|invoices |             dates              |
|1,2,3,4,5|2021/01/01,2021/03/05,2021/03/06|
Espero que os guste el truco de hoy.



Happy coding

0 Comentarios

 
 
 

Archivo