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

Query

Estas en el tema de Query en el foro de Oracle en Foros del Web. Hola.. Miren tengo el siguiente problema... quiero de una tabla saber si un registro es distinto para un mismo ID ejemplo tabla1 tiene campos (id ...
  #1 (permalink)  
Antiguo 27/04/2012, 14:40
 
Fecha de Ingreso: abril-2012
Mensajes: 4
Antigüedad: 11 años, 11 meses
Puntos: 0
Pregunta Query

Hola..

Miren tengo el siguiente problema...

quiero de una tabla saber si un registro es distinto para un mismo ID

ejemplo

tabla1 tiene campos (id y rut) y tengo lo siguiente..

ID RUT
1 16198568
1 16198568
3 18472544
1 19874578
3 18472544

Como puede hacer un query que recorra esa tabla y me muestre como resultado de los rut distinto para el mismo ID. o se que el resultado para este ejemplo debiese ser.

ID RUT
1 16198568
1 19874578

Ayuda por favor...

Gracias....
  #2 (permalink)  
Antiguo 02/05/2012, 03:41
 
Fecha de Ingreso: marzo-2012
Mensajes: 11
Antigüedad: 12 años
Puntos: 2
Respuesta: Query

Puede que sea

Select id, rut, count(*)
from tabla1
group by id,rut

De esta forma te devolverá lo siguiente:
ID RUT COUNT
1 16198568 2
1 19874578 1
3 18472544 2

Con la 'group by' es obligatorio una función de agregado, luego puedes ignorar si quieres los datos de la última pregunta

Un saludo
  #3 (permalink)  
Antiguo 02/05/2012, 06:23
 
Fecha de Ingreso: abril-2012
Mensajes: 4
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Query

Gracias por tu ayuda pero...

No me sirve porque en el Count del ID 1 quedaria en 3 por ser 3 registros y no en 2 que es lo que necesito porque son solo 2 rut distintos...
  #4 (permalink)  
Antiguo 02/05/2012, 08:22
 
Fecha de Ingreso: enero-2007
Ubicación: Cali - Valle
Mensajes: 135
Antigüedad: 17 años, 2 meses
Puntos: 4
Respuesta: Query

Hola snipercorsario.

Lo que debes hacer del query que te paso mifasolsol es quitar el count, pasaria de esto:

Código MySQL:
Ver original
  1. Select id, rut, count(*)
  2. from tabla1
  3. group by id,rut

a esto:

Código MySQL:
Ver original
  1. Select id, rut
  2. from tabla1
  3. group by id,rut

con eso ya te daria solo los rut que son diferentes.

Saludos
  #5 (permalink)  
Antiguo 02/05/2012, 08:26
 
Fecha de Ingreso: abril-2012
Mensajes: 4
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Query

SI pero no me explico... la idea es en el mismo Query, solo mostrar los casos e que para un mismo ID hay 2 o mas rut distintos.... ya que si ocupo solo el group by tambien me mostrara los id que tienen 1 solo rut...

Gracias
  #6 (permalink)  
Antiguo 02/05/2012, 08:29
 
Fecha de Ingreso: enero-2007
Ubicación: Cali - Valle
Mensajes: 135
Antigüedad: 17 años, 2 meses
Puntos: 4
Respuesta: Query

snipercorsario.

Lo que te entiendo es que quieres filtrar por el Id, entonces seria adicionar una condicion al query que ya esta.

Código MySQL:
Ver original
  1. SELECT id, rut
  2.     FROM tabla1
  3. Where Id = 1 -- Esta es la condicion que necesitarias.
  4.     GROUP BY id,rut

Saludos
  #7 (permalink)  
Antiguo 02/05/2012, 09:13
 
Fecha de Ingreso: abril-2012
Mensajes: 4
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Query

Mira ya resolvi provisoriamente...

en lo que me indicas no me sirve ya eso es solo para un ID, pero no me sirve para una base que tiene muchos ID...

por ahora hice lo siguiente...

cree una vista que tuviera la agrupacion

create o replace view prueba (id,rut)
as
select id,rut from tabla1
group by id,rut

Con esto consegui guardas la informacion agrupada luego cree la siguiente consulta que me contara lo que habia agrupado en la vista. y dejar solo que agrupo con 2 o mas ID, que serian los ID con rut distintos..

select id,rut from tabla1
where id in (select id from prueba
group by id
having count(*)>1)

Si ha alguien se le ocurre algo mejor se lo agradeceria...


Gracias

Etiquetas: query-complejo
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 05:51.