traer repetir repetidos registros mostrar evitar eliminar duplicados consulta buscar agrupar sql sql-server sql-server-2012

repetir - Combinación de registros duplicados en SQL Server



no repetir registros en consulta sql (2)

Tengo una tabla en SQL Server 2012 que contiene una lista de partes, la ubicación de las piezas y la cantidad disponible. El problema que tengo es que alguien pone un espacio delante de la ubicación cuando lo agregaron a la base de datos. Esto permitió que hubiera dos registros.

Necesito crear un trabajo que encuentre las partes con espacios antes de la ubicación y agregar esas partes a las partes idénticas sin espacios en frente de la ubicación. No estoy seguro de dónde comenzar con esto.

Este es el antes:

Partno | PartRev | Location | OnHand | Identity_Column -------------------------------------------------------------------- 0D6591D 000 MV3 55.000 103939 0D6591D 000 MV3 -55.000 104618

Esto es lo que me gustaría tener después de ejecutar el trabajo:

Partno | PartRev | Location | OnHand | Identity_Column -------------------------------------------------------------------- 0D6591D 000 MV3 0 104618


Dos pasos: 1. actualizar los registros con las ubicaciones correctas, 2. eliminar los registros con las ubicaciones incorrectas.

update mytable set onhand = onhand + ( select coalesce(sum(wrong.onhand), 0) from mytable wrong where wrong.location like '' %'' and trim(wrong.location) = mytable.location ) where location not like '' %''; delete from mytable where location like '' %'';


Puede hacer una agrupación con una cláusula HAVING on para identificar los registros. He usado REPLACE para reemplazar espacios con cadenas vacías en la columna de ubicación, también podría usar LTRIM y RTRIM :

CREATE TABLE #Sample ( [Partno] VARCHAR(7) , [PartRev] INT , [Location] VARCHAR(5) , [OnHand] INT , [Identity_Column] INT ); INSERT INTO #Sample ([Partno], [PartRev], [Location], [OnHand], [Identity_Column]) VALUES (''0D6591D'', 000, '' MV3'', 55.000, 103939), (''0D6591D'', 000, ''MV3'', -55.000, 104618) ; SELECT Partno , PartRev , REPLACE( Location, '' '', '''') Location, SUM(OnHand) [OnHand] FROM #Sample GROUP BY REPLACE(Location, '' '', '''') , Partno , PartRev HAVING COUNT(Identity_Column) > 1; DROP TABLE #Sample;

Produce:

Partno PartRev Location OnHand 0D6591D 0 MV3 0