Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Duda con group by y substring!!!! (https://www.clubdelphi.com/foros/showthread.php?t=88659)

Vampiro_MABM 11-07-2015 18:16:31

Duda con group by y substring!!!!
 
Hola, antes que nada me presento me llamo Miguel Angel Blanco, he leído con mucho interés este foro la verdad es que me ha sacado de varios apuros, agradezco por eso.

En fin, como suele suceder, tendemos a buscar foros cuando algo se nos atora, he leído mucho aquí sobre la sentencia Substring, sin embargo no encontré algo similar a lo que pretendo obtener, les cuento.

Tengo un campo cvl_ubica de tipo string y guarda algo similar a esto '090161040' donde los primeros dos dígitos (09) se refieren a la entidad, los siguientes 3 (016) a la delegación/municipio y los 4 últimos (1040) a la colonia, lo que pretendo obtener es lo siguiente:

cvl_mater - substring(clv_mater from 1 for 2) - substring(clv_mater from 3 for 3) - Total
090161040 - 09 - 016 - 1
090171204 - 09 - 017 - 2
150231112 - 15 - 023 - 6

La finalidad como ya lo habran deducido es saber cuantas delegaciones/municipio hay en cada entidad.

Mi Query es el siguiente:
Código SQL [-]
select clv_ubica,
       substring(clv_ubica from 1 for 2) as clv,
       substring(clv_ubica from 3 for 3) as clv00,
       count(clv_ubica) as total
from secce0
group by clv_ubica

Pero al correrlo manda este mensaje:

No tengo aun permitido subir imágenes o enlaces, por lo pronto les dejo el mensaje:

Project SIIEEBA.exe raised exception class EDBEngineError whit message 'Expresions in group by are not suported.'
stopped. Use Step or Run to continue.

Casimiro Notevi 11-07-2015 20:25:05

Hola, bienvenido a clubdelphi, por favor, no olvides leer nuestra guía de estilo, gracias.

En cuanto a tu duda, falta un detalle importante: ¿qué sistema de base de datos estás usando?
Por cierto, el BDE está muy obsoleto, ya va siendo hora de actualizarse :)

Aunque todavía no tengas permiso para poner imágenes, hazlo de todas formas, y un moderador pondrá el enlace adecuado para que se muestre.

Tampoco entiendo bien qué datos quieres obtener con ese ejemplo.

¡Ah!, y no olvides poner las etiquetas cuando pongas código fuente (en este caso te lo ha puesto el moderador ecfisa)
Ejemplo:


ecfisa 11-07-2015 21:25:52

Hola Vampiro_MABM.

No soy experto en Paradox, sin embargo en este artículo:SQL: Using the SUBSTRING Function, se menciona:
Cita:

As the SUBSTRING function is not supported at all by IB or LIBS databases, it is not possible to have a substring operation in the column list of a query (exception: IB can do sub-strings via User-Defined Functions).

But through use of the LIKE operator and the accompanying character substitution marker, it is possible to effect a sub-string in a WHERE clause. For example, using the sample table EMPLOYEE (in the EMPLOYEE.GDB database)
Creo que en este caso el problema se produce por que cuando usas la columna CLV_UBICA como argumento de la función SUBSTRING, Paradox la promueve como expresión, de allí el mensaje de error:
Cita:

Expresions in group by are not suported
También te podría resultar interesante leer este enlace: Query con SUBSTRING y GROUP BY

Saludos :)

fjcg02 12-07-2015 10:48:15

Hola
Código SQL [-]
select clv_ubica,
       substring(clv_ubica from 1 for 2) as clv,
       substring(clv_ubica from 3 for 3) as clv00,
       count(clv_ubica) as total
from secce0
group by clv_ubica
en principio, en una select con agrupación, todos los campos que no aparecen en el group by deben tener una función de agregado.

Es decir, debería ser algo así como esto.

Código SQL [-]
select 
       substring(clv_ubica from 1 for 2) as clv,
       substring(clv_ubica from 3 for 3) as clv00,
       count(clv_ubica) as total
from secce0
group by substring(clv_ubica from 1 for 2), substring(clv_ubica from 3 for 3)
He quitado clv_ubica porque si no te saldría un afila por cada valor de ese campo, es decir, nada que puedas utilizar.

Bueno, aver si tienes suerte. Por un lado no te da error, y por otro, consigues la información que necesitas.

Un saludo

Vampiro_MABM 12-08-2015 02:51:30

Gracias, muchas gracias....
 
Gracias a todos por sus respuestas, prometo pronto ponerme trucha para aportar y aprovechar este foro.

Casmiro Notevi: He leído la guía y como ya prometi, me pondré las pilas para participar correctamente, respecto al BDE que utilizo es paradox y tablas creadas en fox2.0 hace unos 10 años, estamos en proceso de cambiar el motor, pero en el gobierno todo lo sencillo y que no le deja lana a los administradores, tarda en hacerse o de plano no se hace.

Ecfisa: Gracias por el apoyo para darle formato a mi query. Leí el tema que me recomendaste y me ayudo a resolver el problema.

Saludos.

Pd. La semana pasada probé la solución que me propuso el amigo fjcg02, lamentablemente no funciono, sigue marcando error, pero gracias a las referencias y apoyo que me dieron obtuve una solución que aunque no me da directo el resultado si me permite manipular lo que arroja el query para solucionar el problema, muchas gracias a todos.... ^\||/

Este es el nuevo código:

Código SQL [-]
select clv_ubica, count(substring(clv_ubica from 3 for 3)) as total from secce0 group by clv_ubica



Pd. Ofrezco una disculpa por la tardanza en la contestación, pero algo pasa con mi maquina de la oficina pues no puedo responder mensajes. Ahora que estoy de vacaciones me traje la lap a casa y parece que aqui no hay problema.


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

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