|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2002 Messages : 34 ![]() |
Bonjour,
J'utilise Interbase 6 et Delphi 5 avec le BDE. Je voudrais fairee quelque chose du style: SELECT sum(REGLEMENT.MONTANT_REGLEMENT) as total FROM REGLEMENT group by EXTRACT(MONTH from REGLEMENT.DATE_REGLEMENT) + EXTRACT(YEAR from REGLEMENT.DATE_REGLEMENT) Evidemment ça ne marche pas. Mais auriez vous une idée pour faire ça ? fp |
|
|
00
|
|
|
#2 |
|
Membre du Club
![]() Inscription : mars 2003 Messages : 44 ![]() |
je ne sais pas si c'est la meilleure idée, mais tu peux passer par une vue, qui contient ta table + une collonne correspondant au mois ... et ainsi ta requete se fait avec un group by sur cette collonne
|
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Tu as plusieurs solutions dont une qui consisterai à créer une vue basée sur ta table REGLEMENT mais qui y ajouterai une colonne calculée du type : substr(CAST(DATE_REGLEMENT as char(10)),1,7) (ou mieux deux colonnes : substr(CAST(DATE_REGLEMENT as char(10)),1,4) et substr(CAST(DATE_REGLEMENT as char(10)),6,7) )
et à partir de cette vue tu pourra faire les regroupements que tu désires. |
|
|
00
|
|
|
#4 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2002 Messages : 34 ![]() |
Bonjour,
Je croyais que vous m'aviez sauvé mais mon Interbase ne reconnait pas l'instruction SUBSTR. J'ai essayé : select substr(CAST(reglement.DATE_REGLEMENT as char(10)),1,4) from reglement pour voir et je reçois: "An error was found in the application program input parameters for the SQL statement. Dynamic SQL Error. SQL error code = -804. Function unknown. SUBSTR." Je teste avec EMS Quickdesk. Sinon j'ai découvert l'utilisation de EXTRACT sur le site: http://sqlpro.developpez.com/SQL_AZ_2.html car l'aide d'Interbase n'en parle pas (ou je n'ai pas su chercher). Et il y aurait la solution de construire sous Delphi une requête dynamique avec 12 unions: SELECT sum(REGLEMENT.MONTANT_REGLEMENT) as total FROM REGLEMENT where EXTRACT(MONTH from REGLEMENT.DATE_REGLEMENT) = 1 and EXTRACT(YEAR from REGLEMENT.DATE_REGLEMENT) = 2003 union SELECT sum(REGLEMENT.MONTANT_REGLEMENT) as total FROM REGLEMENT where EXTRACT(MONTH from REGLEMENT.DATE_REGLEMENT) = 2 and EXTRACT(YEAR from REGLEMENT.DATE_REGLEMENT) = 2003 ... Mais bof... J'aurais effectivement préféré passer par une vue. Quelles sont les conditions pour que SBSTR fonctionne ? @+ fp |
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2002 Messages : 34 ![]() |
Ca ça fait ma vue:
SELECT reglement.date_reglement, REGLEMENT.MONTANT_REGLEMENT, cast(extract(YEAR from REGLEMENT.DATE_REGLEMENT) as char(4)) as ANNEE, CAST(EXTRACT(MONTH from REGLEMENT.DATE_REGLEMENT) as char(2)) as MOIS FROM REGLEMENT Y a pu qu'à. Merci. fp |
|
|
00
|
|
|
#6 |
|
Membre du Club
![]() Inscription : mars 2003 Messages : 44 ![]() |
soit tu crées une UDF substring ( enfin , 'créer' : tu cherches un peu sur le net pour avoir la fonction , puis tu la déclare dans ta base ..)
soit, faut essayer , tu regardes si EXtract + vue ça marcherais pas ( 1 colonne recevant le mois, une colonne recevant l'année) EDIT : ben voila tu a réussi tout seul ... y'a plus qu'a mettre le sujet comme [RESOLU] (avec la nouvelle méthode : lorsque tu lis les messages, tu as un bouton qui te le permet) |
|
|
00
|
|
|
#7 | ||||
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Substring est fourni avec interbase 6 dans l'UDF ib_udf.dll.
Il suffit juste de déclarer son utilisation dans la base : Code :
par contre tu n'es pas obligé de caster en char : Code :
|
||||
|
|
00
|
|
|
#8 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2002 Messages : 34 ![]() |
Même si aujourd'hui je vais m'en sortir avec Extract, plus d'une fois j'ai souhaité découper des chaînes dans les requêtes. Donc je garde !
@+ Merci fp |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com