eliminar duplicados de un select

124 views
Skip to first unread message

Carlos Pagura

unread,
Nov 13, 2022, 7:34:18 PM11/13/22
to publice...@googlegroups.com
Buenas noches
esta consulta anda bien
SELECT deuddrei.categ, deuddrei.nrocta, maestro.apynom, deuddrei.mes, deuddrei.periodo, deuddrei.montop, deuddrei.fechapag, deuddrei.estado,;
deuddrei.comprob FROM deuddrei, maestro WHERE deuddrei.categ = maestro.categ .AND.;
deuddrei.nrocta = maestro.nrocta .AND. deuddrei.comprob LIKE  nCadena INTO CURSOR curPagosDRI;
ORDER BY maestro.apynom READWRITE

salvo que ahora necesito que extraer un registro por cliente (categ,nrocta)
intenten con distinc pero no  hay caso
sino es posible mejorar la consulta voy a tener que recorrer el cursor y eliminar a pata para dejar un registro x cliente
Alguien me puede ayudar ?
Gracis Carlos Pagura

Ricardo Mata

unread,
Nov 13, 2022, 7:53:43 PM11/13/22
to publice...@googlegroups.com
Utiliza GROUP BY deuddrei.categ, deuddrei.nrocta 



--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/CAAn0hPsv1tSFOWEtxj71aYvVnYLP5Ncm4T62aEmo8dC9S2660w%40mail.gmail.com.

Carlos Pagura

unread,
Nov 13, 2022, 7:58:26 PM11/13/22
to publice...@googlegroups.com

Carlos Pagura

unread,
Nov 13, 2022, 8:26:16 PM11/13/22
to publice...@googlegroups.com
Anduvo de 10
le tuve que agregar SET ENGINEBEHAVIOR 70 porque al principio da error
muchas gracias Ricardo

Ricardo Soldini

unread,
Nov 17, 2022, 1:08:25 PM11/17/22
to Comunidad de Visual Foxpro en Español
Para que no de error por el gropup by DEBES incluir en el Gropup By Todos los campos de la consulta 
en tu caso gropu by 
deuddrei.categ, deuddrei.nrocta, maestro.apynom, deuddrei.mes, deuddrei.periodo, deuddrei.montop, deuddrei.fechapag, deuddrei.estado,;
deuddrei.comprob
Te pego la ayuda de otro foro 
Lo que pasa es que cuando utilizas la instrucción "GROUP BY" en una consulta "SELECT - SQL" debes asegurarte que todos los campos que devolverá tu consulta que no se calculen con una función de agregado (como lo es el "MAX()") se incluyan en el "GROUP BY".
En las últimas versiones de Visual FoxPro, como la 9, se valida lo anterior y si no se cumple con ello, te muestra que hay un error con el "GROUP BY". En versiones anteriores creo que no lo validaba, por eso antes no marcaba error, y simplemente, muchas veces terminaba mostrando datos erróneos.
Ejemplo: Si tienes una tabla de Empleados y una tabla de Ventas, en donde por cada empleado puden existir muchas ventas, es decir, un empleado puede haber realizado varias ventas. Al querer obtener un reporte que tenga el nombre del empleado, el número de factura y la fecha de factura pero agrupado solamente por empleado, el sistema no puede calcularlo, es natural.
Si hay dos empleado, y cada empleado tiene dos ventas, al agrupar el reporte por empleado, el sistema se limitará a mostrar solamente dos registros (uno por cada empleado), pero si se le pide el número y fecha de factura, cómo sabría cuál (de las dos ventas de cada empelado) elegir para poner en el reporte. Simplemente no es posible, es por eso que marca error, hay un registro por cada empleado pero puede haber más de un registro de venta para cada uno.
Espero se entienda pero es un poco difícil explicarlo así por escrito y con puro texto. En cuanto al problema, pues por lo explicado anteriormente, si quieres agrupar por empleado, la fecha y el número de factura no se pueden mostrar (¿pues cuál mostraría? Si son varias por cada empleado). Podría quedar algo así:
SELECT ;
Empleado.c_empleado, ;
SUM(Facturas.total_factura) AS Total ;
FROM ;
control_datos!empleado ;
INNER JOIN control_datos!facturas ON Empleado.c_empleado = Facturas.c_empleado ;
WHERE Facturas.fecha_fact >= Date(2011,08,01) ;
GROUP BY Empleado.c_empleado ;
ORDER BY Empleado.c_empleado

Pablo Flores

unread,
Nov 17, 2022, 1:32:15 PM11/17/22
to publice...@googlegroups.com
Algo que me da resultado a mi sin hacer SET ENGINEBEHAVIOR 70 , es hacer una consulta con una subconsulta.
Ej: select id, campo1, campo2, t2.total from tabla1
Left outer join (select id_campo, sum (total) as total group by id_campo) t2
On tabla1.id=no se si esto es mas lento o no pero a mi me da resultados y evito colocar todos lps campos en el group by.
Saludos.
Pablo Flores


From: publice...@googlegroups.com <publice...@googlegroups.com> on behalf of Ricardo Soldini <ricardo...@gmail.com>
Sent: Thursday, November 17, 2022 3:08:25 PM
To: Comunidad de Visual Foxpro en Español <publice...@googlegroups.com>
Subject: Re: [vfp] eliminar duplicados de un select
 

Oscar Quiros Coto

unread,
Nov 17, 2022, 5:00:50 PM11/17/22
to Comunidad de Visual Foxpro en Español
Buenas tardes
lo mejor es poner distinct

SELECT distinct campo1,campo2 
  from tabla

Guillermo Rodríguez

unread,
Nov 26, 2022, 7:01:59 PM11/26/22
to publice...@googlegroups.com
Select distinción from......

Reply all
Reply to author
Forward
0 new messages