Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-07-2005
jonmendi jonmendi is offline
Miembro
 
Registrado: dic 2004
Posts: 110
Poder: 20
jonmendi Va por buen camino
tabla no vacia con group by

Hola,
me pasa lo siguiente. Si ejecuto esta query
Código:
 select codigo from articulos.db where codigo=43
y comprubo si query3.IsEmpty me da el resultado esperado (vacio).

Pero si la query es
Código:
SELECTcodigo,sum(1+codigo) FROM articulos.db WHERE codigo=43 GROUP BY CODIGO
a pesar de que no haya ningún registro me devuelve que no está vacío. (La query real es algo más complicadilla, peo con esta pasa lo mismo)

¿El sum mete algún registro por defecto? si es así, ¿como comprobar que realmente solo hay ese registro?

Gracias a todos
Jon
Responder Con Cita
  #2  
Antiguo 28-07-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por jonmendi
Código SQL [-]
SELECTcodigo,sum(1+codigo) FROM articulos.db WHERE codigo=43 GROUP BY CODIGO
No tiene sentido esta consulta, agrupar y filtrar de forma excluyente por el mismo campo. ¿Porque no hacer?:
Código SQL [-]
SELECT sum(1+codigo) FROM articulos.db WHERE codigo=43
Ten en cuenta que al hacer sum(1+codigo) y siendo 43 el valor del código sumará 44 por cada registro que encuentre.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 28-07-2005
jonmendi jonmendi is offline
Miembro
 
Registrado: dic 2004
Posts: 110
Poder: 20
jonmendi Va por buen camino
hola,

efectivamente esta consulta tal como está no tiene sentido. He puesto esa consulta tan sencilla (a la vez que absurda) para que el problema se entendiera bien y no complicar a nadie con una query más larga que no aporta ninguna mayor información al problema. Incluso en esta query tan sencilla el IsEmpty da False cuando debería ser True.

No sé si me he explicado....

Gracias!
Jon
Responder Con Cita
  #4  
Antiguo 28-07-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por jonmendi
He puesto esa consulta tan sencilla (a la vez que absurda) para que el problema se entendiera bien y no complicar a nadie con una query más larga que no aporta ninguna mayor información al problema.
Creí que no se trataba de un ejemplo

Cita:
Empezado por jonmendi
Incluso en esta query tan sencilla el IsEmpty da False cuando debería ser True.
¿Exactamente la consulta del ejemplo te produce el mismo efecto?... ¿Que motor y herramientas de conexión utilizas?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 28-07-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Por lo que veo utiliza Paradox y supongo que la conexión la hará con el BDE?

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #6  
Antiguo 28-07-2005
jonmendi jonmendi is offline
Miembro
 
Registrado: dic 2004
Posts: 110
Poder: 20
jonmendi Va por buen camino
hola a todos,
efectivamente, tal como dice marcoszorrilla, uso delphi7, paradox, y BDE.

Gracias de nuevo
Responder Con Cita
  #7  
Antiguo 28-07-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos
Cita:
Empezado por jonmendi
Incluso en esta query tan sencilla el IsEmpty da False cuando debería ser True.
Al hacer Sum devolvera por lo menos un registro con valor 0 ya que no encontro ningun registro que sumar.

Nota: Esto no lo he probado, pero me resulta logico:P
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #8  
Antiguo 28-07-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por vtdeleon
Al hacer Sum devolvera por lo menos un registro con valor 0 ya que no encontro ningun registro que sumar.
Eso sería así, en el caso de que no se agrupe por nada, pero cuando se agrupa, tiene que devolver un registro por cada grupo, y si no hay grupos en el resulset, no tiene que retornar ningún registro.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #9  
Antiguo 28-07-2005
Avatar de hector.roma
hector.roma hector.roma is offline
Miembro
 
Registrado: jul 2005
Ubicación: a caballo entre Galicia y Portugal
Posts: 58
Poder: 19
hector.roma Va por buen camino
Recapitulemos

Supongamos una tabla por todos conocida y las siguentes sql...
Código SQL [-]
SELECT count(codcli) ,sum(codcli +1), codcli 
FROM clientes 
WHERE codcli=999

Código SQL [-]
SELECT count(codcli) ,sum(codcli +1), codcli 
FROM clientes 
WHERE codcli=999 
GROUP BY codcli

La primera versión da error ya que la columna codcli, no está incluida en ninguna función de agregado y no hay claúsula GROUP BY. Al añadirla, ya todo corre bien como es normal.

La sentencia COUNT devuelve CERO si no encuentra ningún registro, por eso si la tabla está vacía o si ese registro no existe, devolverá CERO. En cualquier otro caso, el valor que le corresponda.

La sentencia SUM ignora los valores nulos, por lo menos en T-SQL, por lo que si codcli es null, no debería devolver nada.

Ahora bien, a mi también me puede parecer lógico que en otras implementaciones hayan adoptado la postura de devolver cero como la funcion COUNT.

Saludos, y buen viaje a los que os vais de vaciones.
Y cuidado con las francesas/es.
Responder Con Cita
  #10  
Antiguo 28-07-2005
jonmendi jonmendi is offline
Miembro
 
Registrado: dic 2004
Posts: 110
Poder: 20
jonmendi Va por buen camino
Muchas gracias a todos. A mi no me parecía tan lógico, pero supongo que lo será.... Abro otro hilo con otra duda...

Jon
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:31:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi