Group By Error en VFP 9.0

He querido hacer una consulta utilizando el SQL, antes trabaje un poco en VFP 6.0 y ahora que estoy retomando la programación me encuentro que VFP 9.0 no admite la sentencia GROUP BY, he buscado en foros similares pero sus explicaciones son un poco confusas y al final no me aclaran nada. Dicen algunos que existe una sentencia (no recuerdo en este momento) pero que la usan y listo pero no dicen en que parte si antes de utilizar el Select o como parte de este, en fin, mi pregunta es porque en VFP 9 da este error y como lo puedo solucionar para este código que tengo a continuación. Te envío este código para que en el (si puedes) me dieras un ejemplo ya que se me hace más fácil entenderlo sobre la base lógica en la que estoy trabajando:
SELECT
Empleado.c_empleado, Facturas.fecha_fact, Facturas.num_fact,;
Facturas.total_factura;
FROM ;
control_datos!empleado ;
INNER JOIN control_datos!facturas ;
ON Empleado.c_empleado = Facturas.c_empleado;
WHERE Facturas.fecha_fact >= Date(2011,08,01);
ORDER BY Empleado.c_empleado
Lo que quiero son todas los registros en donde la fecha de factura sea mayor al 01/08/11 agrupadas por c.Empleado mostrando la suma totales para cada empleado.
Chequea un poco mi código es sencillo pero no soy muy ducho en cuanto al manejo del SQL.
Por cierto cheque una respuesta tuya sobre los Skin de VFP y comparto tu opinión, creo que VFP ofrece un amplio mundo de posibilidades para el diseño solo hace falta un poco de creatividad.

1 respuesta

Respuesta
1
Visual FoxPro 9 sí adminte la sentencia "GROUP BY".
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
O si no es eso lo que quieres, dame un ejemplo de la tabla que esperarías como resultado del reporte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas