Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1508 connectés 

  FORUM HardWare.fr
  Programmation

  [asp][sql] Requête trop balaise à faire...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[asp][sql] Requête trop balaise à faire...

n°34754
Mammam
Et la lumière fût...
Posté le 28-05-2001 à 12:24:24  profilanswer
 

En gros, il faut que je fasse une somme d'un champ sur un cumul de 12 mois à partir d'une date donnée  :ouch:
 
Pour l'instant, je ne m'occupe pô de la date donnée, j'ai fait une requête avec des valeurs fixes...
 
Voici la douloureuse :
sql = "select sum(eprdhyd_e) from table where (annee='2001' and mois between '01' and '02') and (annee='2000' and mois between '03' and '12')"
 
Ben, marche pô... je veux la somme des valeurs de 'eprdhyd_e' du 03/2000 au 02/2001 (la date donnée sera 02/2001)


---------------
-- Le MaM is back --
mood
Publicité
Posté le 28-05-2001 à 12:24:24  profilanswer
 

n°34758
trictrac
Posté le 28-05-2001 à 12:41:44  profilanswer
 

sacre mam, tjs aussi movai...
select sum(eprdhyd_e) from table where (annee='2001' and mois between '01' and '02') OR (annee='2000' and mois between '03' and '12')"  
 
Comment veux tu qu'un truc soit et en 2000 et en 2001

n°34759
Fred999
Rabat-joie
Posté le 28-05-2001 à 12:48:33  profilanswer
 

Oui, mais cai pas assez pratique comme requête.
 
Pour que ça marche à chaque fois sur une période de 12 mois :
 

Code :
  1. select sum(toto)
  2. from
  3.        table
  4. where
  5.        annee * 100 + mois between (annee_debut * 100 + mois_debut) and (annee_fin * 100 + mois_fin)


 
Comme ça, tu prends n'importe quelle période, ça marchera à tous les coups.

n°34766
Mammam
Et la lumière fût...
Posté le 28-05-2001 à 13:11:38  profilanswer
 

Trictrac -> Ta soeur pov'con  :D (nan, je préfère celle du Lux  :love: )...
 
Je suis pô bon en sgbd, j'y peux rien... et pis un OR à la place d'un AND, c pô la mort...
 
Merci Fred pour ta requête, mais y va me falloir 2 heures pour comprendre...  :sol:


---------------
-- Le MaM is back --
n°34772
Mammam
Et la lumière fût...
Posté le 28-05-2001 à 13:27:55  profilanswer
 

Heu, Fred... C censé donner ki avec les valeurs...
 
select sum(eprdhyd_e)  
from  
       table  
where  
       annee * 100 + mois between (2000 * 100 + 03) and (2001 * 100 + 02)
 
Ben, gauffrage...


---------------
-- Le MaM is back --
n°34775
Fred999
Rabat-joie
Posté le 28-05-2001 à 13:32:21  profilanswer
 

Alors voilà :  
 
Tu veux effectuer une requête portant sur une période de type :
 
mois/année début -> mois/année fin.
 
Pour ce genre de trucs, il y a un format de date qui convient très bien : AAAAMM.
 
Par exemple, si tu veux aller de mai 2000 (05/2000) à mars 2001 (03/2001), tu iras alors de 200005 à 200103.
 
Vu la structure de ta table, avec un champ année et un champ mois, tu passes au format AAAAMM avec l'opération suivante :  
 
année * 100 + mois.
 
ex pour mai 2000 : 2000 * 100 + 5 = 200000 + 5 = 200005
 
L'intérêt de ce format est qu'il permet d'effectuer des comparaisons de dates en les considérant comme des NOMBRES.
 
Et, évidemment, tu peux étendre ça au format AAAAMMJJHHMMSS :D
 
PS : un OR à la place d'un AND CAI LA MORT :o

n°34785
LeMegaBlai​reau
Posté le 28-05-2001 à 13:39:57  profilanswer
 

:bounce:  cool j'allais justement te poser la question fred pour la multiplication par 100.
 :hap:

n°34786
Mammam
Et la lumière fût...
Posté le 28-05-2001 à 13:40:45  profilanswer
 

Mouais... mais y'a un hic !
si je fais un "select toto from table where annee = annee *100"...
On s'arrête là, c'est suffisant pour la démo.  
Avec annee = 2001, on a:
"select toto from table where annee = 200100"...
Jusque là, j'ai compris.  :D  
 
Or, dans ma table, j'ai un champ 'annee' et un champ 'date'...
Donc le serveur va regarder dans ma table si y'a un 'annee = 200100'... or étant donné ke je n'ai ke que 2001 dans mon champ 'annee', y va gauffré et me dire ki trouve pô de résultat (logique, nan  :pt1cable: )
 
Et comme ma table a 102 lignes, g pô envie de reprendre tout ça... mais g compris ta technique et c vrai ke c pô tétard tout ça...  :benetton:


---------------
-- Le MaM is back --
n°34793
trictrac
Posté le 28-05-2001 à 13:47:18  profilanswer
 

mais t'es c** mam.... il te demande pas de changer les donees dans la table.. puisque tu sais qu'il fo multiplier par 100..
 
tu cherche donc pas annee = 200100, mais annee*100 = 200100..
et puis ceci implique d'avoir le mois = 0.. puisque la manip n'a d'utilité que si tu veux tenir compte des mois aussi..

n°34795
Mammam
Et la lumière fût...
Posté le 28-05-2001 à 13:52:02  profilanswer
 

:crazy:  :ouch:  :sweat:  :sweat:  :sleep:  :sleep:  ;)  ;)  :sol:  :eek2:  :eek2:  :cry: boh, j'abandonne.....................  :cry:  :hot:  :hot:  :hot:  :hot:  :hot:  :hot:  :gun:  :gun:  :gun:  :gun:  :eek2:  
 
 
 
ARRGGGHHHH, JE CRAQUE !!!!!


---------------
-- Le MaM is back --
mood
Publicité
Posté le 28-05-2001 à 13:52:02  profilanswer
 

n°34796
Fred999
Rabat-joie
Posté le 28-05-2001 à 13:54:48  profilanswer
 

(avec un champ date le principe est strictement le même)
 
(pour les détails, j'arrive, je bouffe)

n°34800
wouatouwou​atou
Posté le 28-05-2001 à 13:58:44  profilanswer
 

hihhi.. salut Fred999 !!!!!
T'en a fais craquer un .. :D
Bref, ta technique est cool...
La multiplication par 100 c pour tenir compte des mois pour ceux ki l'aurait pas vu .. :D:D je fais celui ki a l'air d'avoir compris :p...
Com trictrac l'a dit... c bien si tu veux prendre en compte plus qu'un seul champ de la date.. genre annee et mois..
ou encore mois et jour... etc.


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°34802
Mammam
Et la lumière fût...
Posté le 28-05-2001 à 14:00:21  profilanswer
 

heu, m'a trompé, g annee et mois
avec annee  mois  champ1  champ2 ...
     2001   02    v1_1    v2_1
     2001   01    v1_2    v2_2
     2000   12    v1_3    v2_3
     2000   11    v1_4    v2_4
     2000   10    v1_5    v2_5
 
etc...


---------------
-- Le MaM is back --
n°34822
Fred999
Rabat-joie
Posté le 28-05-2001 à 14:47:59  profilanswer
 

mammam a écrit a écrit :

Heu, Fred... C censé donner ki avec les valeurs...
 
select sum(eprdhyd_e)  
from  
       table  
where  
       annee * 100 + mois between (2000 * 100 + 03) and (2001 * 100 + 02)
 
Ben, gauffrage...




 
C'est quoi le message d'erreur? :??:  
 
Bizarre, j'ai déjà employé cette méthode.

n°34827
wouatouwou​atou
Posté le 28-05-2001 à 14:59:45  profilanswer
 

a mon avis... annee c pas un nombre mais un varchar ou un truc dans le genre.. :??:


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°34834
Fred999
Rabat-joie
Posté le 28-05-2001 à 15:15:50  profilanswer
 

Waouh alors là ce serait très fort.

n°34880
irulan
Posté le 28-05-2001 à 16:55:27  profilanswer
 

Je conseillerais alors dans ce cas d'ajouter une colonne FLAG_CUMUL_FIXE qui prend la valeur 1 quand les mois sont à prendre en compte dans le cumul fixe, et la valeur 0 par défaut.
Cela permettra rapidement de sélectionner les mois corrects (avec une moulinette toute con, ça permettra en plus de mettre à jour ultérieurement en 2 temps 3 mouvements)
 
Sinon un truc du genre :
 
Select annee,mois,sum(eprdhyd_e) from table
 group by annee,mois
 where FLAG_CUMUL_FIXE = 1;
 
pourrait marcher, non ? (sans utiliser de flag, il suffit de changer le where)

 

[edit]--Message édité par irulan--[/edit]

n°35033
Mammam
Et la lumière fût...
Posté le 29-05-2001 à 08:35:42  profilanswer
 

Merci de votre aide... Mais j'ai fait la requête 1° version... avec le fameux 'OR'... Ca marche bien, et c'est l'essentiel !
 
Le pb, c'est kil fô pô ke je commence à rajouter flag un peu tout partout partout c'es^t pô moi ki fera la mise à jour... Eh oui, je suis en stage...


---------------
-- Le MaM is back --
n°35055
irulan
Posté le 29-05-2001 à 09:39:54  profilanswer
 

Mais justement la colonne flag est beaucoup plus facile à maintenir avec un petit script à lancer une fois par mois, qui s'occupera de mettre à jour les valeurs correctement, plutôt qu'aller chaque fois modifier en dur le script que tu fais !
 
Le script de MAJ du flag devra bien sûr faire intervenir sysdate (qui donne la date du jour), afin de n'avoir qu'a faire un copier-coller quand on veut mettre à jour.
Enfin bon moi je dis ça... :sarcastic:

 

[edit]--Message édité par irulan--[/edit]

n°35100
Mammam
Et la lumière fût...
Posté le 29-05-2001 à 10:45:46  profilanswer
 

Ben, pour l'instant, le script du site est tel que l'utilisateur n'a qu'à remplir la table et ça fait tout tout seul... C'était le but du stage : faciliter la maintenance (enfin, kan qqun vous dit faciliter la maintenance, ça veut dire ke moins il en aura à faire plus y sera content)... Donc mission accomplie...


---------------
-- Le MaM is back --
n°35116
Fred999
Rabat-joie
Posté le 29-05-2001 à 11:07:02  profilanswer
 

Disons que le fait de changer les dates en dur dans le script n'est pas vraiment ce qu'il y a de plus pratique...
 
La soluce d'Irulan est aussi pratique.

n°35197
Mammam
Et la lumière fût...
Posté le 29-05-2001 à 13:35:30  profilanswer
 

Ah ben nan... je ne change pô les dates en dur dans le script... En fait, je récupère le mois et l'année d'une liste (remplie avec une table) que l'utilisateur sélectionne et je change les valeurs sur ma page suivant la date avec une requête qui figure dans une table 'choix'...
 
Je m'explique un peu parce ke hors contexte,  :pt1cable:  
 
J'ai une table 'table' qui contient diverses valeurs par mois et par annee.
J'ai une table 'choix' qui contient un champ 'index', un champ 'requete'.
Quand je clique sur un élément du menu, je mets à jour un fichier dans lequel j'écris un code (qui correspond à l'index).
Et au chargement de ma page, je lis le code qu'il y a dans le fichier, je fais une requête sur ma table 'choix' avec ce code (select requete from choix where index=code)...
 
Maintenant ke g ma requete, je la lance sur le serveur avec le mois et l'année correspondant au choix de l'utilisateur (liste au dessus)...   :hap:


---------------
-- Le MaM is back --
n°35225
Fred999
Rabat-joie
Posté le 29-05-2001 à 14:34:16  profilanswer
 

OK d'ac.
 
Reconnais qu'on pouvait se poser des questions!

n°35287
Mammam
Et la lumière fût...
Posté le 29-05-2001 à 16:44:53  profilanswer
 

C'est vrai... C toujours chiant de s'exprimer quand y'a pô le contexte...


---------------
-- Le MaM is back --
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [asp][sql] Requête trop balaise à faire...

 

Sujets relatifs
[ASP] Afficher le résultat d'une requête particulière...[ASP] Requete avec un max... ???
PB requete multi critère sous acess[SQL] [access] problème avec requête sur un champ de type date
requete sur plusieurs tables en sql....surement facile MAis...[SQL Server] besoin d'aide pour requete de maj
[SQL] => Elle me soûle cette requête qui veut pô marcher !!!!!!Access; pb de création de graphique à partir d'une requête (cause sq)
[ASP] C'est big urgent svp ! Requête dans tableau...[PHP] j'ai besoin d'aide pour afficher une requete...
Plus de sujets relatifs à : [asp][sql] Requête trop balaise à faire...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR