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

problema con group by....

Estas en el tema de problema con group by.... en el foro de SQL Server en Foros del Web. hola, bueno no se como solucionar esta consulta, ya que por el group by me trae oviamente datos repetidos, ya que el codigo_id de la ...
  #1 (permalink)  
Antiguo 02/12/2009, 15:27
 
Fecha de Ingreso: mayo-2008
Mensajes: 25
Antigüedad: 16 años
Puntos: 0
problema con group by....

hola,

bueno no se como solucionar esta consulta, ya que por el group by me trae oviamente datos repetidos, ya que el codigo_id de la tabla inventario existe 2 veces en la tabla articulos. ok a ver si me explico tengo 2 clientes, 2 marcas entonces en mi tabla de inventario estan asi

codigo_id pzas

2900001 1
2900002 1
2900003 1

y necesito sacar datos de la tabla de articulos

cliente marca talla color codigo_id
1 XXX CHICA ROJO 2900001
2 XXX CHICA ROJO 2900001
1 AAAA GRANDE AZUL 2900002
2 AAAA GRANDE VERDE 2900003

y mi consulta seria asi

select a.codigo_id, b.talla, b.color, sum(a.pzas)
from inventario a left outer join articulos b
on a.codigo_id = b.codigo_id
group by a.codigo_id, b.talla, b.color

y el resultado es este


codigo_id talla color pzas
2900001 CHICA ROJO 1
2900001 CHICA ROJO 1
2900002 GRANDE AZUL 1
2900003 GRANDE VERDE 1

COMO PUEDO EVITAR QUE SE DUPLIQUEN?

por cierto no puedo quitar ningun cliente ya que hay articulos que existen en uno y no en el otro y viceversa

DE ANTEMANO MUCHAS GRACIAS POR SU AYUDA
  #2 (permalink)  
Antiguo 02/12/2009, 15:52
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: problema con group by....

Has probado asi?
Código sql:
Ver original
  1. SELECT DISTINCT a.codigo_id, b.talla, b.color, a.pzas
  2. FROM inventario a
  3. LEFT OUTER JOIN articulos b ON a.codigo_id = b.codigo_id
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 03/12/2009, 11:57
 
Fecha de Ingreso: mayo-2008
Mensajes: 25
Antigüedad: 16 años
Puntos: 0
Respuesta: problema con group by....

tienes razon!!, se que es algo muy basico, pero nunca habia tenido que hacer una consulta asi, no habia considerado el select distinct

muchisimas gracias
  #4 (permalink)  
Antiguo 03/12/2009, 12:13
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: problema con group by....

Group By en la practica se usa cuando quieres obtener la suma de un grupo de registros, o valor máximo de un grupo de registros, etc.
Usa distinct cuando simplemente no quieres registros repetidos.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 03/12/2009, 14:28
 
Fecha de Ingreso: mayo-2008
Mensajes: 25
Antigüedad: 16 años
Puntos: 0
Respuesta: problema con group by....

ok pero encontre otro problema, si supongamos que un registro tiene diferente alguna descripcion con el select distinct me lo pone 2 veces, ejemplo el codigo 2900003 en una empresa esta como talla GRANDE y en otra como talla GDE
saldria asi

codigo_id talla color pzas
2900001 CHICA ROJO 1
2900002 GRANDE AZUL 1
2900003 GDE VERDE 1
2900003 GRANDE VERDE 1

alguna sugerencia
  #6 (permalink)  
Antiguo 03/12/2009, 15:07
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: problema con group by....

Tendrías que hacer un subconsulta donde dejes uno de los dos. El criterio lo defines tu: puede ser el que tenga mas informacion, o prevalece el de tal compañia, etc.
Código sql:
Ver original
  1. SELECT DISTINCT a.codigo_id, b.talla, b.color, a.pzas
  2. FROM inventario a
  3. LEFT OUTER JOIN (
  4.     SELECT codigo_id, talla, color
  5.     FROM articulos
  6.     WHERE <criterio>
  7. ) b ON a.codigo_id = b.codigo_id
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #7 (permalink)  
Antiguo 03/12/2009, 16:51
 
Fecha de Ingreso: mayo-2008
Mensajes: 25
Antigüedad: 16 años
Puntos: 0
Respuesta: problema con group by....

Cita:
Iniciado por flaviovich Ver Mensaje
Tendrías que hacer un subconsulta donde dejes uno de los dos. El criterio lo defines tu: puede ser el que tenga mas informacion, o prevalece el de tal compañia, etc.
Código sql:
Ver original
  1. SELECT DISTINCT a.codigo_id, b.talla, b.color, a.pzas
  2. FROM inventario a
  3. LEFT OUTER JOIN (
  4.     SELECT codigo_id, talla, color
  5.     FROM articulos
  6.     WHERE <criterio>
  7. ) b ON a.codigo_id = b.codigo_id

ok ahora si me diste la idea, tienes razon primero debo depurar la tabla de articulos basado en algun criterio, ya que no puedo eliminar clientes por que pueden existir articulos que no existen en el otro lo que hice fue numerar cada articulo con row_numer, asi si existian 2 de algun articulo solo tomaria el primero usando una subconsulta que lo ligara con la tabla inventarios, por lo que el select distinct no seria necesario

quedaria asi

SELECT A.codigo_id,V.codigo_id, V.TALLA, V.COLOR, A.PZAS FROM inventario A LEFT OUTER JOIN
(SELECT row_number() over(partition by codigo_id order by cliente) as 'num', * FROM ARTICULOS
) as V on A.codigo_id = V.codigo_id
WHERE V.num = 1

dandome el resultado que quiero

codigo_id codigo_id TALLA COLOR PZAS
2900001 2900001 CHICA ROJO 1
2900002 2900002 GRANDE AZUL 1
2900003 2900003 GDE VERDE 1

muchas gracias flaviovich creo que ahora si ya quedo
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 02:23.