FORUM Tom's Hardware » Programmation » VB / VBA / VBS » ACCESS : Requête calcul SQL
 

ACCESS : Requête calcul SQL

Il y a 158 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : ACCESS : Requête calcul SQL
 
Plus d'informations

Bonjour,
Gros problème, petite question :  
Je cherche à effectuer un calcul par le biais d'une requête (en SQL...), pour cela je fais appelle à une table mais le calcul est différent selon le type du champ...hum hum pour être plus clair, un exemple :
pour une année : z = a - Type "x" + Type "y"
comment faire appelle aux 2 types (2 enregistrments différents) ? (quelle est la "structure" du programme ?)
merci par avance pour votre potentielle aide  :jap:

zeb
Profil : Modérateur libre
Plus d'informations

Lapin compris.
Qu'est-ce tu appelles "Type" ?
 
Donne un exemple, stp

Plus d'informations

ui d'accord, je manque de vocabulaire..alors un exemple, voici la structure de la table (et le remplissage) :
 
Id_Entité       /    Année    /      TypeEchange               /       Valeur Echange
 14                      2002                Import                                54
 14                      2002                Export                                110
 14                      2003                Import                                16
 14                      2003                Export                                100
etc.
 
et donc dans la requête le calcul recherché est, par année et par Entité, du genre :  
z = a + (TypeEchange = "Import" ) - (TypeEchange = "Export" )
voilà...le type c'est Import ou Export et je ne sais pas comment "faire appelle" à l'un ou l'autre...

Plus d'informations

halala...j'allais oublier ! en fait, dans le calcul il faut utiliser Valeur Echange...(puisque TypeEchange est enfait du texte...) mille excuses

zeb
Profil : Modérateur libre
Plus d'informations

Soluce simple à comprendre !
 
Récupère la somme des valeurs echangées en import :

SELECT Sum ( ValeurEchange )
FROM   TaTable
WHERE  TypeEchange = 'Import'


 
Récupère la somme des valeurs echangées en export :

SELECT Sum ( ValeurEchange )
FROM   TaTable
WHERE  TypeEchange = 'Export'


 
Fais la différence des deux et ajoute a, tu auras z.

Plus d'informations

merci ! mais petit problème persistant j'ai le message suivant :
 
Erreur de syntaxe : TypeEchange = 'Export'
 
(jai bien essayé les " mais pas mieux...), une idée ?

zeb
Profil : Modérateur libre
Plus d'informations

Non :(
Donne-nous la structure de la table comme ACCESS te la décrit.

Plus d'informations

Voici les tables :
 
Table COLL_Exp_Imp :
Id_Collectivite
Type_Interco (Import/Export)
Année
Volume
 
Table COLL_Distrib :
Id_Collectivite
Année
Volume_Distrib
 
Table COLL_Factur :
Id_Collectivite
Année
Volume_Factur
 
Le calcul souhaité via la requête (par année et par collectivite):
Rdt_Calcule = Volume_Factur / (Volume_Distrib - (Volume, Type_Interco = Export) + (Volume, Type_Interco = Import)
 
La requête sous forme SQL et qui ne "fonctionne" pas  :
 SELECT COLL_Factur.Id_Collectivite, COLL_Factur.Annee, First([COLL_Factur].[Volume_Factur]/([COLL_Distrib].[Volume_Distrib]-[COLL_Exp_Imp].[Export]+[COLL_Exp_Imp].[Import])) AS Rdt_Calcule
FROM ((((COLL_Distrib AS COLL_Distrib_1 INNER JOIN COLL_Factur AS COLL_Factur_1 ON COLL_Distrib_1.Id_Collectivite = COLL_Factur_1.Id_Collectivite) INNER JOIN Collectivites_AEP ON COLL_Distrib_1.Id_Collectivite = Collectivites_AEP.Id_Collectivite) INNER JOIN COLL_Distrib ON Collectivites_AEP.Id_Collectivite = COLL_Distrib.Id_Collectivite) INNER JOIN COLL_Exp_Imp ON Collectivites_AEP.Id_Collectivite = COLL_Exp_Imp.Id_Collectivite) INNER JOIN COLL_Factur ON Collectivites_AEP.Id_Collectivite = COLL_Factur.Id_Collectivite
GROUP BY COLL_Factur.Id_Collectivite, COLL_Factur.Annee, Collectivites_AEP.Interco_Nord
HAVING (((Collectivites_AEP.Interco_Nord)=No));
 
Voilà, je ne peux pas être plus précise (capacités limitées sur Access...), des idées ?

zeb
Profil : Modérateur libre
Plus d'informations

Mais, tu ne nous donne pas le type des colonnes :(
Surtout Type_Interco.
 
C'est n'importe quoi ta requête :o  (Dit sans méchanceté)
Trop de INNER JOIN ! La preuve, COLL_Distrib et Collectivites_AEP sont liées deux fois ! Et ce First, à quoi sert-il ?
 
Dans ton deuxième message, tu parlais d'une table. En fait, il s'agissait du résultat d'une requête. Quelle requête ?

Plus d'informations

et oui je suis nulle   :cry:  mais pleine de bonne volonté  :ange:  
euh...le type des colonnes c'est  
 
Table COLL_Exp_Imp :
Id_Collectivite : numérique
Type_Interco (Import/Export) : texte
Année : numérique
Volume : numérique
 
Table COLL_Distrib :
Id_Collectivite : numérique
Année : numérique
Volume_Distrib : numérique
 
 
Table COLL_Factur :
Id_Collectivite : numérique
Année : numérique
Volume_Factur : numérique
 
(j'ai bon là ?)
 
La table de mon deuxième message, on oublie, c'était un exemple pour pas à avoir à tout déballer (jumelle de la table COLL_Import_Export)...
 
Le first je ne sais pas à quoi il sert...en fait j'ai commencé la requête avec l'assistant et pouf, en SQL, le First était là.
La requête sert à calculer Rdt_Calcule...
help...

zeb
Profil : Modérateur libre
Plus d'informations

Essaie ça :

Code :
  1. SELECT    Année, SommeImport.Somme - SommeExport.Somme
  2. FROM    ( SELECT   SUM ( Volume ) Somme, Année
  3.           FROM     COLL_Exp_Imp
  4.           WHERE    Type_Interco = 'Import'
  5.           GROUP BY Année ) AS SommeImport,
  6.         ( SELECT   SUM ( Volume ) Somme, Année
  7.           FROM     COLL_Exp_Imp
  8.           WHERE    Type_Interco = 'Export'
  9.           GROUP BY Année ) AS SommeExport
  10. WHERE  SommeImport.Année = SommeExport.Année


 
(Pas testé, je n'ai pas ACCESS. )

Plus d'informations

Bonjour et merci pour ton aide. Ta solution ne marchait pas sur Access, mais la suivante fonctionne bien :
 

Code :
  1. select cDistrib.Annee, CollAEP.Id_Collectivite, SUM(cFactur.Volume_Factur) / (SUM(cDistrib.Volume_Distrib) - SUM(cExport.Volume) + SUM(cImport.Volume)) as Rdt_Calcule
  2. from COLL_Factur cFactur,
  3. COLL_Exp_Imp cExport,
  4. COLL_Exp_Imp cImport,
  5. COLL_Distrib cDistrib,
  6. Collectivites_AEP CollAEP
  7. where
  8. CollAEP.Id_Collectivite = cDistrib.Id_Collectivite
  9. AND CollAEP.Id_Collectivite = cImport.Id_Collectivite
  10. AND CollAEP.Id_Collectivite = cExport.Id_Collectivite
  11. AND CollAEP.Id_Collectivite = cFactur.Id_Collectivite
  12. AND cImport.Type_Interco = 'Import'
  13. AND CExport.Type_Interco = 'Export'
  14. AND cDistrib.Annee = cImport.Année
  15. AND cDistrib.Annee = cExport.Année
  16. AND cDistrib.Annee = cFactur.Annee
  17. Group by cDistrib.Annee, CollAEP.Id_Collectivite


 
Je pense que cela pourrait servir à d'autres...(merci encore !)  :hello:  

zeb
Profil : Modérateur libre
Plus d'informations

:)


Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » VB / VBA / VBS » ACCESS : Requête calcul SQL
 

Annonces Google