Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problemas con Extract (https://www.clubdelphi.com/foros/showthread.php?t=12430)

eduarcol 15-07-2004 23:27:41

Problemas con Extract
 
Hola Foro tengo el siguiente problema:

Realizo una consulta en SQL, utilizndo un TQuery y trabajando paradox por medio del BDE en Delphi 5.

La consulta es la siguiente

Código SQL [-]
Select Extract(Month from Fecha) as Mes, Receptora, sum(TM + TMAgre - 
TMDesc) as Pescado, sum(TM) as PescadoBalanza from taVrmp where
(extract(year from Fecha) = "2004") group by Mes, Receptora order by
Receptora, Mes

Pero me da el error:

Cita:

Invalid Field Name Mes
Que podra ser eso??

Mes no es ningun campo dentro de la tabla, y no tengo agregado los TFIelds

delphi.com.ar 16-07-2004 02:54:54

La verdad que no conozco el SQL de Paradox, pero prueba esto:
Código SQL [-]
Select Extract(Month from Fecha) as Mes, Receptora, sum(TM + TMAgre - 
TMDesc) as Pescado, sum(TM) as PescadoBalanza from taVrmp where
(extract(year from Fecha) = "2004") group by Extract(Month from Fecha), Receptora order by
Receptora, Extract(Month from Fecha)
Saludos!

jachguate 16-07-2004 07:04:48

Ha hecho falta sustituir también en el Group By.

Esto debido a que Mes es solamente un alias, que no puede ser usado en otras partes de la consulta. Al menos no, segun el estándar.

hasta luego.

;)

delphi.com.ar 16-07-2004 15:32:38

Cita:

Empezado por jachguate
Ha hecho falta sustituir también en el Group By.

Esta todo tan pegado que solo había visto el group by! (no había visto el order by :D)
Ya lo corregí!

Pablo Carlos 16-07-2004 16:13:37

Claro... en el sql el orden se debe dar por un campo de la tabla y no por un alias como dice jachguate. inclusive puedes decirlo asi order by 1 donde 1 es el primer campo del select
Saludos

nefy 16-07-2004 17:26:44

El problema es el alias q pones Eduardo, ya hice pruebas en mi maquina y de esta manera no da problemas:
Código:

SELECT NoClausura Numero, NoLicencia Licencia, Extract (Month from Fecha) Mes
FROM Clausura

Si notas no es necesario usa "AS".

Nota: Las pruebas las hice con paradox, Delphi 6 y un query

Salu2.

eduarcol 16-07-2004 18:22:24

Bueno, ya vamos encaminados, si le quito el group by y el order by si funciona, por eso mismo tendria que quitar el sum de los campos, ahora este cursor que me devuelve la consulta:
Código SQL [-]
Select Extract(Month from Fecha) as Mes, Receptora, (TM + TMAgre - 
TMDesc) as Pescado, sum(TM) as PescadoBalanza from taVrmp where
(extract(year from Fecha) = "2004")


tendria que hacerle esta consulta:

Código SQL [-]
Select Mes, Receptora, Sum(Pescado), Sum(PescadoBalanza) from "cursor" group by Mes, Receptora


La duda seria como obtengo el cursor resultante del query anterior para colocarlo en el from dela siguiente consulta, ya intenteen el from insertar la consulta y el error que marca es invalid use o token, con respecto al orden por el numero me da capacidad no soportada :(

jachguate 16-07-2004 18:27:31

Ya puestos a esta manera, podes crear una vista con la primera consulta y hacer el select de la vista, aunque en este caso no es estrictamente necesario. Siguiendo los consejos anteriores podes hacer un select único que te devuelva los datos que buscas.

Hasta luego.

;)

nefy 16-07-2004 18:44:56

Pues haciendo pruebas me di cuenta q no es permitido hacer tu consulta eduardo, de esta manera es permisible:
Código:

SELECT NoClausura, NoLicencia, Fecha, SUM( Multa ) Multa
FROM Clausura
GROUP BY NoClausura, NoLicencia, Fecha
ORDER BY NoClausura

Sin embargo al agregar el Extract manda la excepcion:
"Expressions in group by are not supported", asi q debes buscar otro camino. Si comenta q es lo q deseas hacer exactamente quizas sea mas facil q te ayuden.

Salu2.

eduarcol 16-07-2004 18:55:13

Cita:

Empezado por delphi.com.ar
La verdad que no conozco el SQL de Paradox, pero prueba esto:
Código SQL [-]
Select Extract(Month from Fecha) as Mes, Receptora, sum(TM + TMAgre - 
TMDesc) as Pescado, sum(TM) as PescadoBalanza from taVrmp where
(extract(year from Fecha) = "2004") group by Extract(Month from Fecha), Receptora order by
Receptora, Extract(Month from Fecha)
Saludos!

Lo hice en el group y en el order y da "Expressions in group by are not supported"

Cita:

Empezado por PABLOCARLOS
Claro... en el sql el orden se debe dar por un campo de la tabla y no por un alias como dice jachguate. inclusive puedes decirlo asi order by 1 donde 1 es el primer campo del select
Saludos

dice capability no suported

Cita:

Empezado por jachguate
Ya puestos a esta manera, podes crear una vista con la primera consulta y hacer el select de la vista, aunque en este caso no es estrictamente necesario. Siguiendo los consejos anteriores podes hacer un select único que te devuelva los datos que buscas.

Hasta luego.

Eso es lo que he intentado un select unico pero sigue sin funcionar por las razonesexpuestas

Cita:

Empezado por Nefy
Sin embargo al agregar el Extract manda la excepcion:
"Expressions in group by are not supported", asi q debes buscar otro camino. Si comenta q es lo q deseas hacer exactamente quizas sea mas facil q te ayuden.

lo que deseo es sumar el total de pescado y agruparlo por mes en un año determinado

nefy 16-07-2004 19:25:11

Cita:

Empezado por eduarcol
lo que deseo es sumar el total de pescado y agruparlo por mes en un año determinado

Si usas el QuickReport (me imagino q quieres generar un reporte) yo haria lo siguiente:
1.-Selecciono todos los registros de un año determinado usando un TQuery
2.-Relaciono el TQuery a un QuickReport uso QRExpr para generar las sumas y un QRGroup para agrupar los datos por mes.

Salu2.

nefy 16-07-2004 19:27:41

Me falto añadir q en el primer paso al generar la consulta no ocuparas usar Group by pues lo haras en el QuickReport y ahora si podras usar Extract

Salu2.

eduarcol 16-07-2004 19:28:13

El asunto es que no solo va a un reporte, tambien va a una presentacion en pantalla de ingreso de datos

nefy 16-07-2004 19:31:55

Cita:

Empezado por eduarcol
tambien va a una presentacion en pantalla de ingreso de datos

Pretendes q el usuario modifique el resultado de la consulta?. Mas bien te has de referir a q deseas mostrar en pantalla una vista previa al reporte no??.

Salu2.

eduarcol 16-07-2004 19:35:19

No esos son datos que no se modifican, solo que en determinada pantalla de ingreso de datos debo mostrar la lista de recepcion por mes del año en curso para valores referenciales

nefy 16-07-2004 19:39:53

Y porq no lo haces mostrando un Previem del Reporte generado??


salu2.

eduarcol 16-07-2004 19:44:14

Lo que pasa es que todo debe estar en la misma pantalla previsualizacion de los datos e ingreso de otros datos adicionales, son exigencias del cliente asi que ni modo

jachguate 16-07-2004 19:57:21

En ib 6.0 lo he solucionado creando una vista (con un solo select es imposible) y luego haciendo un select de la vista y agrupando.

En otros motores si es perfectamente válido usar la expresión. En firebird 1.5 no lo he intentado, puesto que todo ha venido de ib 6 y sigo con la misma mecánica de trabajo.

Hasta luego.

;)

nefy 16-07-2004 20:02:31

Cita:

Empezado por eduarcol
Lo que pasa es que todo debe estar en la misma pantalla previsualizacion de los datos e ingreso de otros datos adicionales, son exigencias del cliente asi que ni modo

Vaya ahi si q pues te quedaria buscar un control q te permita visualizar los datos
la verdad q ahi si no se como se le podria hacer. Asi q tienes trabajo ;) aparte de VPN.

Salu2.

eduarcol 16-07-2004 20:09:56

Cita:

Empezado por nefy
Asi q tienes trabajo ;) aparte de VPN.
Salu2.

no tienes una idea de cuanto, ojala esas dos fueran solo mis preocupaciones

trabajar con un verdadero motor relacional como IB seria lo ideal. pero ni modo, me tocara guardar el resultado de la consulta en una tabala temporal y luego sacar la otra consulta desde esa tabla, no veo otra


La franja horaria es GMT +2. Ahora son las 01:49:40.

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