Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-09-2014
hecospina hecospina is offline
Miembro
 
Registrado: oct 2007
Posts: 202
Poder: 17
hecospina Va por buen camino
Problemas al Agrupar por un campo COMPUTED BY

Hola

Hace tiempo que no ingresaba al foro
Un saludo para todos

Tengo instalado Firebird 2.5 32 bits en mi equipo
Se realizo una actualizacion de la aplicacion con la que accedo a la base de datos y me surgio un problema, los sql que tenia en mis consultas con la clausula Group by dejaron de realizar la agrupacion, despues de revisar encontre que cuando adiciono al grupo un campo "Computed by" se pierde la agrupacion

Este SQL me deberia devolver los datos agrupados por documento
Código SQL [-]
select factura,nombre_cliente,sum(valor) as valor
from tabla
group by factura,nombre_cliente
1345,JUAN PEREZ,100.000
1346,PEDRO PEREZ,230.000
1347,MARIA PEREZ,45.000

Pero me regresa los datos sin agrupar

1345,JUAN PEREZ,60.000
1345,JUAN PEREZ,20.000
1345,JUAN PEREZ,20.000
1346,JUAN PEREZ,200.000
1346,JUAN PEREZ,10.000
1346,JUAN PEREZ,20.000
1347,JUAN PEREZ,45.000

si cambio el query haciendo trim al campo computed by funciona correctamente
Código SQL [-]
select factura,trim(nombre_cliente) as nombre_cliente,sum(valor) as valor
from tabla
group by factura,trim(nombre_cliente)
La base de datos no se ha desinstalado ni modificado la configuracion

La solucion es simple, hacer el trim a todos los campos, el problema es que tengo muchos reportes

Quedo atento a su ayuda

Muchas gracias

Última edición por ecfisa fecha: 30-09-2014 a las 06:00:47. Razón: Agregar etiquetas [SQL] [/SQL]
Responder Con Cita
  #2  
Antiguo 30-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola hecospina.

Para quitar los espacios y evitar el uso de TRIM en la consulta podes hacer:
Código SQL [-]
UPDATE TABLA
SET NOMBRE_CLIENTE = TRIM(NOMBRE_CLIENTE)
y luego modificar el programa para que realize TRIM antes de cada guardado.

Pero... con eso no se soluciona la cosa. TRIM eliminará los espacios a la derecha e izquierda, pero el usuario podría por ejemplo, poner dos espacios entre el nombre y apellido (o equivocarse una letra al escribir). Y en esos casos GROUP BY tampoco agrupará dichos valores por ser distintos.

Lo ideal sería que reemplazaras la columna NOMBRE_CLIENTE por el identificador único de cliente correspondiente a la tabla clientes, de ese modo no habría equívoco posible:
Código SQL [-]
CREATE TABLE TABLA (
    ...
    CLIENTE_ID  INTEGER,  /* ID (cliente) */
    ...
);
Los valores de las columnas se verían parecido a esto:
Código:
FACTURA	VALOR	CLIENTE_ID
1345	60	1          (JUAN PEREZ)
1345	20	1
1345	20	1
1346	80	2          (OTRO CLIENTE)
Y la consulta equivalente sería:
Código SQL [-]
SELECT T1.FACTURA, T2.NOMBRE_CLIENTE, SUM(T1.VALOR) AS VALOR
FROM TABLA T1
INNER JOIN CLIENTES T2 ON T1.CLIENTE_ID = T2.ID
GROUP BY T1.FACTURA, T2.NOMBRE_CLIENTE
Ahora poco importa si en la tabla de clientes a JUAN PEREZ lo ingresaron con espacios, o como JUAN PERES, etc., ya que siempre se tratará del mismo contenido y por lo tanto se agrupará.

Ha... por cierto, no olvides de poner las etiquetas [sql] ... [/sql] a tu código SQL (ya las agregué en tu mensaje)

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 30-09-2014
hecospina hecospina is offline
Miembro
 
Registrado: oct 2007
Posts: 202
Poder: 17
hecospina Va por buen camino
Thumbs up

Muchas gracias Daniel

Por tratarse de un campo computed by no es posible realizar el update

Efectivamente la tabla de terceros tiene la llave primaria y el campo nombre es el resultado de unir el primer nombre, el segundo nombre, el primer apellido y el segundo apellido

La consulta la genero haciendo el join a esta tabla

Gracias
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Modificar un campo Computed By Jose Miguel Mun Firebird e Interbase 2 15-01-2009 15:04:29
ClientDataSet y campo COMPUTED BY Jose Miguel Mun Firebird e Interbase 2 24-02-2007 15:29:48
Agrupar por campo ¥0n1 Impresión 5 18-11-2004 13:36:10
Agrupar campo daytime por dia mithos07 Firebird e Interbase 1 12-11-2003 15:34:03


La franja horaria es GMT +2. Ahora son las 20:13:22.


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