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

sentencia con having ?

Estas en el tema de sentencia con having ? en el foro de Bases de Datos General en Foros del Web. Hola amigos, tengo la siguiente pregunta, tengo una tabla con 3 campos: |AUXILIAR | SALDO | FECHADCT | +------------- -------------- --------------------- + | 020110 | ...
  #1 (permalink)  
Antiguo 16/02/2006, 16:09
 
Fecha de Ingreso: marzo-2004
Ubicación: Bucaramanga
Mensajes: 71
Antigüedad: 20 años, 1 mes
Puntos: 0
sentencia con having ?

Hola amigos, tengo la siguiente pregunta, tengo una tabla con 3 campos:

|AUXILIAR | SALDO | FECHADCT |
+------------- -------------- --------------------- +
| 020110 | 1850000000 | 2005-01-01 00:00:00.0 |
| 020110 | 160000000 | 2005-01-03 00:00:00.0 |
| 020125 | 0 | 2005-01-01 00:00:00.0 |--->registro
| 020126 | 1150000000 | 2005-01-01 00:00:00.0 |
| 020126 | 5500000 | 2005-01-03 00:00:00.0 |
| 020128 | 500000 | 2005-01-01 00:00:00.0 |

quisiera presentar todos los registros, pero si solo hay un registro de un auxiliar presentelo solo si su saldo es diferente de cero '0'

osea que la tabla quedaria algo asi:
sin el registro que tiene el auxiliar '020125' ya que solo hay uno y ademas su saldo es cero, pero el '020128' solo hay uno pero su saldo es diferente de cero entonces si lo presenta.

|AUXILIAR | SALDO | FECHADCT |
+------------- -------------- --------------------- +
| 020110 | 1850000000 | 2005-01-01 00:00:00.0 |
| 020110 | 160000000 | 2005-01-03 00:00:00.0 |
| 020126 | 1150000000 | 2005-01-01 00:00:00.0 |
| 020126 | 5500000 | 2005-01-03 00:00:00.0 |
| 020128 | 500000 | 2005-01-01 00:00:00.0 |

estaba probando con having pero no lo se utilizar con el count me presenta errores:

select auxiliar,saldo,fechadct from tabla
group by auxiliar,saldo,fechadct
having count(m.auxiliar)>1 or (count(m.auxiliar)=1 and m.saldo <> 0)

de ante mano gracias, espero haber sido claro
PD. trabajo en oracle o sql para ambas base va mi pregunta
  #2 (permalink)  
Antiguo 16/02/2006, 17:01
 
Fecha de Ingreso: agosto-2005
Mensajes: 2
Antigüedad: 18 años, 8 meses
Puntos: 0
Prueba De Esta Forma:

Select * From Tabla
Group By Auxiliar,saldo,fechadct
Where Saldo > 0
  #3 (permalink)  
Antiguo 17/02/2006, 08:11
 
Fecha de Ingreso: marzo-2004
Ubicación: Bucaramanga
Mensajes: 71
Antigüedad: 20 años, 1 mes
Puntos: 0
mira pueden haber saldos en cero(si hay mas de un registro del mismo auxiliar) lo que no puede haber es un saldo 0 cuando solo haya un registro de ese auxiliar
  #4 (permalink)  
Antiguo 19/02/2006, 09:49
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 4 meses
Puntos: 43
Hola jeffcar!

La consulta creo iría de esta forma, siento que esta un poco larga , a lo mejor se puede reducir con el aporte de los demás.

Entonces quieres que no te muestre los registros en donde solo hay uno y su valor es cero pero si quieres que muestre aquellos donde son más de 2 y en uno o en todos los registros puede contener un valor de cero.

Código PHP:
SELECT FROM tabla WHERE auxiliar IN (SELECT auxiliar FROM tabla GROUP BY auxiliar HAVING (COUNT(auxiliar) = AND saldo != 0) OR (COUNT(auxiliar) > AND saldo >= 0)); 
Un Saludo!
  #5 (permalink)  
Antiguo 20/02/2006, 08:24
 
Fecha de Ingreso: marzo-2004
Ubicación: Bucaramanga
Mensajes: 71
Antigüedad: 20 años, 1 mes
Puntos: 0
jahepi muchas gracias por tu respuesta, pero la consulta me pide que falta una agrupacion y es por el saldo, creo que me podria servir de la siguiente manera:
Código HTML:
SELECT * FROM tabla WHERE auxiliar 
IN (SELECT auxiliar FROM tabla GROUP BY auxiliar HAVING 
(COUNT(auxiliar) = 1 AND sum(saldo) != 0) OR (COUNT(auxiliar) > 1));  
ya que si tiene mas de un auxiliar no me interesa saber el saldo:
(COUNT(auxiliar) > 1))
pero si tiene solo un auxiliar :
(COUNT(auxiliar) = 1 AND sum(saldo) != 0)
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 11:45.