Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-01-2014
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Query con SUBSTRING y GROUP BY

Necesito ejecutar un query del siguiente estilo contra tablas Paradox para un informe impreso:
Código:
SELECT A.Apellidos, A.Nombre, A.Iban, SUBSTRING(Iban FROM 5 FOR 8) Oficina,
       COUNT(B.Referencia) RecPte, SUM(B.Importe) ImpPte
FROM 'Persona.db' A, 'Recibos.db' B
WHERE A.Referencia = B.Referencia
GROUP BY A.Apellidos, A.Nombre, A.Iban, Oficina
ORDER BY Oficina, Iban
El problema me viene en la claúsula GROUP BY. Si lo pongo como está me dice Invalid Field Name refiriéndose al campo Oficina; si pongo en su lugar SUBSTRING(Iban FROM 5 FOR 8) me dice Capability not supported.

Otra alternativa que había pensado era ordenar por ese trozo del campo, así:
Código:
ORDER BY SUBSTRING(Iban FROM 5 FOR 8), NomJun, Apellidos, Nombre, Referencia
eliminando ese SUBSTRING del SELECT, pero entonces me dice Invalid use of keyword.

¿Alguna sugerencia?
Responder Con Cita
  #2  
Antiguo 09-01-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 Angel.Matilla.

Las bases de datos locales como Paradox o dBASE no soportan el uso de la declaración GROUP BY sobre valores calculados.

No soy experto en estas BD's pero si la agrupación dependiese de una condición podrías usar la cláusula UNION para lograrlo, por ejemplo:
Código SQL [-]
SELECT NOMBRE, DIRECCION FROM TB_CLIENTES
WHERE SUBSTRING(NOMBRE FROM 2 FOR 1) = 'a'
UNION ALL
SELECT NOMBRE, DIRECCION FROM TB_CLIENTES
WHERE SUBSTRING(NOMBRE FROM 2 FOR 1) = 'a'
Pero al menos yo, no veo como aplicarlo a tu caso...

Mi consejo es que abandones las obsoletas bases de datos de escritorio y te vuelques a algo mas poderoso y que te dé menos quebraderos de cabeza.
Aunque hay otras igualmente buenas, Firebird es una excelente opción; es sencillo de configurar, altamente estandarizado y sin lugar a dudas muy poderoso. El requerimiento de mantención es despreciable y particularmente no he tenido fallos por años y hasta el momento. Para no ser pesado no me explayo mas sobre sus bondades

Si en algún momento optas por el cambio (o no), te recomiendo leer estos enlaces:
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 09-01-2014
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Muchas gracias por tu respuesta. Intuía que iban por ahí los tiros. Sobre migrar a Firebird, que era mi idea, el cliente se ha negado en redondo.
Responder Con Cita
  #4  
Antiguo 10-01-2014
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 146
Poder: 18
aposi Va por buen camino
has probado así ?

Código SQL [-]
SELECT A.Apellidos, A.Nombre, A.Iban, SUBSTRING(Iban FROM 5 FOR 8) Oficina,        COUNT(B.Referencia) RecPte, SUM(B.Importe) ImpPte 
FROM 'Persona.db' A, 'Recibos.db' B
WHERE A.Referencia = B.Referencia 
GROUP BY A.Apellidos, A.Nombre, A.Iban, Oficina 
ORDER BY 4, Iban

el 4 indica el numero de campo
Responder Con Cita
  #5  
Antiguo 10-01-2014
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Sí, y tampoco funciona. El probelma es que las tablas Paradox no soportan esa funcionalidad.
Responder Con Cita
  #6  
Antiguo 10-01-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Angel.Matilla Ver Mensaje
Muchas gracias por tu respuesta. Intuía que iban por ahí los tiros. Sobre migrar a Firebird, que era mi idea, el cliente se ha negado en redondo.
Jamás se me ocurrió preguntar a un cliente qué BD quiere que use para resolverle un problema.
Jamás un médico me preguntó qué medicina quiero tomar para curarme una dolencia.
Jamás un mecánico me preguntó qué herramienta usar para reparar el motor de mi coche.
etc...
Responder Con Cita
  #7  
Antiguo 10-01-2014
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Jamás se me ocurrió preguntar a un cliente qué BD quiere que use para resolverle un problema.
Jamás un médico me preguntó qué medicina quiero tomar para curarme una dolencia.
Jamás un mecánico me preguntó qué herramienta usar para reparar el motor de mi coche.
etc...
Pues sí, Casimiro..., pero el médico no te paga cuando vas a consultarlo, ni el mecánico firma un compromiso de pago cuando te contrata..., y el cliente sí. En éste caso se aplica la sabia premisa del póker que dice a la letra "el que paga, manda"...
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
  #8  
Antiguo 10-01-2014
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Por raro que te parezca esto no lo decido yo; quieren un sistema que no requiera tener ni el más mínimo conocimiento ni de máquinas ni de programas. Yo hubiera preferido instalar Firebird o MySql.
Responder Con Cita
  #9  
Antiguo 10-01-2014
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 146
Poder: 18
aposi Va por buen camino
Hola Angel,
viendo la consulta, estas tratando de ordenar por entidad bancaria.
A parte del IBAN tienes guardado el BIC / SWIF (a partir del 1 de febrero es obligatorio tener este dato para enviar al cobro los recibos)?
Este codigo los 4 primeros caracteres es la entidad, por lo que ordenando por el BIC, tendrias la ordenacion por entidad
Responder Con Cita
  #10  
Antiguo 10-01-2014
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por aposi Ver Mensaje
Hola Angel,
viendo la consulta, estas tratando de ordenar por entidad bancaria.
A parte del IBAN tienes guardado el BIC / SWIF (a partir del 1 de febrero es obligatorio tener este dato para enviar al cobro los recibos)?
Este codigo los 4 primeros caracteres es la entidad, por lo que ordenando por el BIC, tendrias la ordenacion por entidad
El código BIC sólo es obligatorio en transferencias intracomunitarias no para recibos domiciliados:
Cita:
Código BIC

El BIC (Bank Identfier Code) identifica al banco beneficiario de una transferencia. Completa la información proporcionada por el Código IBAN. Normalmente consta de 11 caracteres, aunque en ocasiones pueden ser solamente 8. También se conoce a menudo con el nombre de código o dirección Swift. Para que una transferencia intracomunitaria sujeta al Reglameto 2560/2001 esté sometida a la misma comisión que una nacional de idéntico importe, el ordenante debe facilitar al banco entre otros los códigos IBAN y BIC del beneficiario.
Banco de España
Responder Con Cita
  #11  
Antiguo 10-01-2014
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 146
Poder: 18
aposi Va por buen camino
Si desde tu aplicación generas ficheros para la norma 19 de cobro de recibos, es uno de los campos obligatoris
Responder Con Cita
  #12  
Antiguo 10-01-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por tiammat Ver Mensaje
Pues sí, Casimiro..., pero el médico no te paga cuando vas a consultarlo, ni el mecánico firma un compromiso de pago cuando te contrata..., y el cliente sí. En éste caso se aplica la sabia premisa del póker que dice a la letra "el que paga, manda"...
Creo que has entendido al revés lo que quiero decir:
Yo le pago al mecánico y no decido qué herramientas usar.
Yo le pago al médico y no decido qué medicinas tomar.

Además, como sabes, firebird es libre y gratis, no le va a costar nada al cliente.
Responder Con Cita
  #13  
Antiguo 11-01-2014
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Además, como sabes, firebird es libre y gratis, no le va a costar nada al cliente.
¡Fíjate! Exactamente el mismo argumento que usé yo. El problema de este cliente es que no quiere tener contratado, de la amnera que sea, a nadie para que le mantenga los equipos en todos los aspectos... Y así le pasa: Cada dos por tres está con probelmas que clar está ha de pagar a parte.
Responder Con Cita
  #14  
Antiguo 11-01-2014
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por aposi Ver Mensaje
Si desde tu aplicación generas ficheros para la norma 19 de cobro de recibos, es uno de los campos obligatoris
He estado repasando la normativa que entra en vigor el 1 de febrero (en la web de la AEB) y el codigo BIC sólo se emplea en el caso de transferencias; si se trata de adeudos por domiciliación (norma CSB 19.14) lo que hay que indicar es el IBAN, y he comprobado los cuadernos de carga en varios sitios (por ejemplo: en Bankia Empresas, páginas 15 a 31 de ese documento) y sólo se hace referencia al IBAN, salvo que se me haya despistado.
Responder Con Cita
  #15  
Antiguo 11-01-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Angel.Matilla Ver Mensaje
¡Fíjate! Exactamente el mismo argumento que usé yo. El problema de este cliente es que no quiere tener contratado, de la amnera que sea, a nadie para que le mantenga los equipos en todos los aspectos... Y así le pasa: Cada dos por tres está con probelmas que clar está ha de pagar a parte.
Bueno, pues peor para él
Responder Con Cita
  #16  
Antiguo 11-01-2014
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Bueno, pues peor para él
Y mejor para mi: tres de cada cuatro veces lo termino arreglando yo.
Responder Con Cita
  #17  
Antiguo 11-01-2014
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 146
Poder: 18
aposi Va por buen camino
Cita:
Empezado por Angel.Matilla Ver Mensaje
He estado repasando la normativa que entra en vigor el 1 de febrero (en la web de la AEB) y el codigo BIC sólo se emplea en el caso de transferencias; si se trata de adeudos por domiciliación (norma CSB 19.14) lo que hay que indicar es el IBAN, y he comprobado los cuadernos de carga en varios sitios (por ejemplo: en Bankia Empresas, páginas 15 a 31 de ese documento) y sólo se hace referencia al IBAN, salvo que se me haya despistado.

Mira la pag 19 del pdf
el campo 10 de la linea del reigstro individual obligatorio
Responder Con Cita
  #18  
Antiguo 12-01-2014
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por aposi Ver Mensaje
Mira la pag 19 del pdf
el campo 10 de la linea del reigstro individual obligatorio
Tienes razón. Se me había despistado. No obstante, dado que tengo una tabla de entidades bancarias, el código SWIFT lo puedo guardar en dicha tabla junto a la definición del mismo.

Última edición por Angel.Matilla fecha: 12-01-2014 a las 09:54:43.
Responder Con Cita
  #19  
Antiguo 12-01-2014
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 146
Poder: 18
aposi Va por buen camino
Cita:
Empezado por Angel.Matilla Ver Mensaje
Tienes razón. Se me había despistado. No obstante, dado que tengo una tabla de entidades bancarias, el código SWIFT lo puedo guardar en dicha tabla junto a la definición del mismo.
Piensa que el swift indica entidad bancaria y localidad y oficina no se si es mejor guardar este codigo junto al iban
Responder Con Cita
  #20  
Antiguo 12-01-2014
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por aposi Ver Mensaje
Piensa que el swift indica entidad bancaria y localidad y oficina no se si es mejor guardar este codigo junto al iban
Varias cosas.
1. No voy a ser yo quien discuta las normas.
2. Dado que este código es necesario para que «una transferencia intracomunitaria sujeta al Reglameto 2560/2001 esté sometida a la misma comisión que una nacional de idéntico importe», no acabo de entender que demonios pinta en un adeudo por domiciliación, que tiene un tratamiento diferente a las transferencias.No obstante, y dado que el código SWIFT se rige por esta norma:
Los primeros cuatro caracteres identifican el banco
Los siguientes dos caracteres, el país (usando el código ISO 3166-1 alpha-2)
Los siguientes dos caracteres, la localidad
Los últimos tres caracteres (opcionales) identifican la oficina; se puede utilizar 'XXX' para referirse a la principal
Puede utilizarse una versión abreviada de ocho caracteres. En tal caso se sobreentiende que la oficina es la principal.
Dicho esto tampoco es tan complejo guardar el código genérico de cada entidad (por ejemplo BSCHESMM para el Banco Santander Central Hispano, CECAESMM para Liberbank o CAIXESBB para Caixabank) y calcular las tres posciones OPCIONLES.
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
Problema con SUBSTRING Gonbamon Firebird e Interbase 5 17-12-2007 18:50:48
Impresion de group header group footer Manuel Impresión 3 11-11-2007 01:05:23
consultas anidadas: group by dentro otro group by DobleSiete SQL 7 31-01-2005 14:59:31
Substring seduerey Varios 1 21-05-2004 19:27:33
Group Header, Detail y Footer Group en la misma pagina MarcelRuz Impresión 0 20-04-2004 23:27:14


La franja horaria es GMT +2. Ahora son las 22:21:33.


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