Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Eliminar registros duplicados con campos distintos

Estas en el tema de Eliminar registros duplicados con campos distintos en el foro de SQL Server en Foros del Web. Hola a todos, tengo un problema con esta consulta: Código: select gm.idGuiaMJ, sum(gc.cantidad) as cantidad, sum(gc.peso) as peso, gc.idMercaderia from GuiasMJ gm inner join GuiasCliente ...
  #1 (permalink)  
Antiguo 13/11/2009, 16:32
 
Fecha de Ingreso: noviembre-2009
Mensajes: 3
Antigüedad: 14 años, 5 meses
Puntos: 1
Eliminar registros duplicados con campos distintos

Hola a todos, tengo un problema con esta consulta:

Código:
select gm.idGuiaMJ, 
	   sum(gc.cantidad) as cantidad,
	   sum(gc.peso) as peso,
	   gc.idMercaderia
from GuiasMJ gm inner join GuiasCliente gc on gm.idGuiaMJ = gc.idGuiaMJ
where gm.idGuiaMJ = 1 
           group by gm.idGuiaMJ, gc.idMercaderia 
           order by gm.idGuiaMJ
Y el resultado que obtengo es este:

Código:
idGuiaMJ	cantidad	peso	 idMercaderia
  1	             6	          30	      1
  1	             6           30	      2
  1	             6           30	      3
Pero lo que quiero obtener es solo una idGuiaMJ, la suma de las cantidades, la suma de los pesos y SOLO LA PRIMERA idMercaderia.

He probado distinct, unique, top, entre otras y no he conseguido resultados, tal vez los este usando mal y la respuesta es mas sencilla de lo que creo.

Bueno, espero me puedan ayudar, gracias de antemano.

Saludos a todos.
  #2 (permalink)  
Antiguo 13/11/2009, 17:54
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Eliminar registros duplicados con campos distintos

Pues debes hacer un SUM(CantidadPeso) y AGRUPAR por los demas campos.
  #3 (permalink)  
Antiguo 14/11/2009, 03:24
 
Fecha de Ingreso: noviembre-2009
Mensajes: 3
Antigüedad: 14 años, 5 meses
Puntos: 1
Respuesta: Eliminar registros duplicados con campos distintos

Muchas gracias iislas por tu respuesta, pero creo que me di a entender mal, lo que en realidad quiero es que estos datos:

Código:
idGuiaMJ	cantidad	peso  idMercaderia
1	            6	           30	         1
1	            6	           30          2
1	            6	           30	         3
Se muestren así:

Código:
idGuiaMJ	cantidad	peso    idMercaderia
    1	           18	          90             1
Es decir, eliminar las "idGuiaMJ" repetidas, sumar "cantidad", sumar "peso" y mostrar sólo el primer campo "idMercaderia", ignorando el segundo y tercer campo "idMercaderia".

Gracias iislas nuevamente por tu interés.
  #4 (permalink)  
Antiguo 14/11/2009, 08:13
Avatar de atak  
Fecha de Ingreso: julio-2005
Ubicación: Huancayo
Mensajes: 490
Antigüedad: 18 años, 9 meses
Puntos: 5
De acuerdo Eliminar registros duplicados con campos distintos

Hola,

aca te muestro un Script que espero te ayuda.
(es recomendable pasarlo a Procedimiento almacenado)
pero como tal este codigo como Consulta debe funcionarte

Supuestas TABLAS:

Tabla01 : guiasMJ (idGuiaMJ N(3))
Tabla02 : guiasClientes(idMercaderia N(3), idGuiaMJ N(3), cantidad N(4), peso N(3))




Código PHP:


--Creamos una tabla temporal
declare @tmpConsulta
table 
(idGuia numeric(3),
 
idMer numeric(3),
 
Cantidad numeric(4), 
 
Peso numeric(3
 )

--
Declaramos variables
declare @idGuia numeric(3);
declare @
primerIdMer numeric(3);
declare @
sumaCantidad numeric(4);
declare @
sumaPeso numeric(4);

-- 
Inicializadmos variable a 1  
--  en un SP es una variable que se recibiría
set 
@idGuia=1;
-- 
Capturamos solo el Primer  idMer
set 
@primerIdMer=(select top 1 idMercaderia 
from guiasClientes
,guiasMJ where(guiasClientes.idGuiaMJ=guiasMJ.idGuiaMJorder by idMercaderia)

-- 
Totalizamos  cantidad en una variable
set 
@sumaCantidad=(select sum(guiasClientes.cantidadfrom guiasClientes,guiasMJ where(guiasClientes.idGuiaMJ=guiasMJ.idGuiaMJ and guiasMJ.idGuiaMJ=@idGuia ))

--
totalizamos peso en una variable
set 
@sumaPeso=(select sum(guiasClientes.pesofrom guiasClientes,guiasMJ where(guiasClientes.idGuiaMJ=guiasMJ.idGuiaMJ and guiasMJ.idGuiaMJ=@idGuia ))

-- 
Insertamos datos  parciales
insert into 
@tmpConsulta(idGuia,idMer,Cantidad,Pesovalues (@idGuia,@primerIdMer,@sumaCantidad,@sumaPeso)

--  
Que contiene mi  Tabla temporal ???
--  
mostramos resultados 
select 
from @tmpConsulta

--  Fin   :


Espero te funcione ..........

Saludos.
__________________
. .: El mejor Inicio :. .
  #5 (permalink)  
Antiguo 16/11/2009, 03:50
 
Fecha de Ingreso: noviembre-2009
Mensajes: 3
Antigüedad: 14 años, 5 meses
Puntos: 1
Respuesta: Eliminar registros duplicados con campos distintos

Gracias atak, tu respuesta es algo parecido a lo que yo esperaba y me ha ayudado bastante. En realidad esa consulta sí está dentro de un procedimiento almacenado, este procedimiento lo que recibe es la idPlanilla, una planilla contiene varias GuiasMJ y una GuiaMJ contiene varias GuiasCliente, entonces el problema está en que yo obtengo varias GuiasMJ de esa Planilla y tu solución sólo sirve para una GuiaMJ.

Gracias a tu respuesta pude seguir más adelante de donde me quedé y el problema ahora era obtener una a una la idGuiaMJ. Buscando en internet encontré que la solución para moverse dinámicamente dentro de una consulta eran los cursores, sin embargo la gran mayoría dice que lo mejor es evitar los cursores ya que consumen bastante memoria.

Por ahora estoy buscando una manera de evitar crear un cursor, aunque parece que al final terminaré usando uno. Bueno pensé que la consulta era fácil y yo me estaba complicando, ya que sólo se trataba de mostrar la primera mercadería e ignorar las demás, pero parece que no.

Gracias amigos iislas y atak por su ayuda, que bueno que haya foros como estos en que la gente ayuda a los demás. Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:20.