ACCESS : Requête calcul SQL
Dernière réponse : dans Programmation
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
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
Autres pages sur : access requete calcul sql
Lassé par la pub ? Créez un compte
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...
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...
Soluce simple à comprendre !
Récupère la somme des valeurs echangées en import :
Récupère la somme des valeurs echangées en export :
Fais la différence des deux et ajoute a, tu auras z.
Récupère la somme des valeurs echangées en import :
SELECT Sum ( ValeurEchange )
FROM TaTable
WHERE TypeEchange = 'Import'
FROM TaTable
WHERE TypeEchange = 'Import'
Récupère la somme des valeurs echangées en export :
SELECT Sum ( ValeurEchange )
FROM TaTable
WHERE TypeEchange = 'Export'
FROM TaTable
WHERE TypeEchange = 'Export'
Fais la différence des deux et ajoute a, tu auras z.
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 ?
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 ?
Mais, tu ne nous donne pas le type des colonnes
Surtout Type_Interco.
C'est n'importe quoi ta requête
(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 ?
Surtout Type_Interco.
C'est n'importe quoi ta requête
(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 ?
et oui je suis nulle
mais pleine de bonne volonté
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...
mais pleine de bonne volonté
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...
Essaie ça :
(Pas testé, je n'ai pas ACCESS. )
SELECT Année, SommeImport.Somme - SommeExport.Somme
FROM ( SELECT SUM ( Volume ) Somme, Année
FROM COLL_Exp_Imp
WHERE Type_Interco = 'Import'
GROUP BY Année ) AS SommeImport,
( SELECT SUM ( Volume ) Somme, Année
FROM COLL_Exp_Imp
WHERE Type_Interco = 'Export'
GROUP BY Année ) AS SommeExport
WHERE SommeImport.Année = SommeExport.Année
(Pas testé, je n'ai pas ACCESS. )
Bonjour et merci pour ton aide. Ta solution ne marchait pas sur Access, mais la suivante fonctionne bien :
Je pense que cela pourrait servir à d'autres...(merci encore !)
select cDistrib.Annee, CollAEP.Id_Collectivite, SUM(cFactur.Volume_Factur) / (SUM(cDistrib.Volume_Distrib) - SUM(cExport.Volume) + SUM(cImport.Volume)) as Rdt_Calcule
from COLL_Factur cFactur,
COLL_Exp_Imp cExport,
COLL_Exp_Imp cImport,
COLL_Distrib cDistrib,
Collectivites_AEP CollAEP
where
CollAEP.Id_Collectivite = cDistrib.Id_Collectivite
AND CollAEP.Id_Collectivite = cImport.Id_Collectivite
AND CollAEP.Id_Collectivite = cExport.Id_Collectivite
AND CollAEP.Id_Collectivite = cFactur.Id_Collectivite
AND cImport.Type_Interco = 'Import'
AND CExport.Type_Interco = 'Export'
AND cDistrib.Annee = cImport.Année
AND cDistrib.Annee = cExport.Année
AND cDistrib.Annee = cFactur.Annee
Group by cDistrib.Annee, CollAEP.Id_Collectivite
Je pense que cela pourrait servir à d'autres...(merci encore !)
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumRequête sql pour faire de calcul
- ForumCalcul de lage en sql sous access
- ForumAccess requête not in
- ForumSql et access
- ForumRequête sql tableau
- ForumRequête sql pour compter
- ForumAccess calcul avec des heures
- ForumAccess calcul date
- ForumAccess requã te calcul
- articlesSql calcul nombre
- Voir plus