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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  SQL: une somme toute bête

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

SQL: une somme toute bête

n°2045573
smilm
Posté le 02-01-2011 à 12:48:52  profilanswer
 

Bonjour,

 

J'ai une table village avec comme champ nom et argent.

 

J'aimerai faire une requete me renvoyant la somme d'argent détenu par les villages ayant pour nom A et B.
Je ne sais pas comment m'y prendre. Pourtant c'est surement assez simple mais je ne sais pas différencier mes deux villages dans la somme.

 

Attention, j'ai une contrainte, je ne veux pas utiliser SUM. Je voudrais quelque chose du type:
SELECT A.argent+B.argent FROM village WHERE nom=A or nom=B. Je sais que cette requète est fausse mais vous voyez sans doute l'idée.

 

Merci d'avance,
SmilM


Message édité par smilm le 02-01-2011 à 12:52:15
mood
Publicité
Posté le 02-01-2011 à 12:48:52  profilanswer
 

n°2045575
flo850
moi je
Posté le 02-01-2011 à 13:06:07  profilanswer
 

sans utiliser sum , ça complique vraiment la requete  
Ca me semble possible avec une jointure, mais beurk  
 
select v1.argent + v2.argent  
FROM village v1 , village v2  
WHERE v1.nom=A AND v2.nom = B

n°2045580
smilm
Posté le 02-01-2011 à 14:04:02  profilanswer
 

Merci!

 

Bon je pense avoir compris le principe. Voici ma requète:

 

SELECT (SUM((F1.MDT+F1.MST)*F1.débit)) + ((F2.MDT+F2.MST)*F2.débit) As Total
FROM Flux as F1, Gems as G1, Flux as F2, Gems as G2
WHERE F1.Bassin = G1.Bassin AND G1.ocean IN('NAT','SAT')
AND F2.Bassin = G2.Bassin AND F2.bassin='Amazonas'

 

Access me renvoi : Vous avez essayer d'executer une requète ne comprenant pas l'expression spécifié "(SUM((F1.MDT+F1.MST)*F1.débit)) + ((F2.MDT+F2.MST)*F2.débit" comme une partie de la fonction d'agrégat.

 

Je ne comprends pas ce message d'erreur. Je cherche partout sur le net mais je ne trouve rien de satisfaisant. Ce qui est sur c'est que si j'enlève le SUM, la requete passe bien mais me renvoi un résultat qui ne m'intéresse pas.
En gros ça me renvoi tout les enregistrements différents qui correspondent à l'expression (F1.MDT+F1.MST)*F1.débit et un deuxième champ identique sur toutes les lignes correspondant a la valeur de  (F2.MDT+F2.MST)*F2.débit ce qui m'intéresse assez peu.

 

Ce que je désire c'est la somme entre (SUM((F1.MDT+F1.MST)*F1.débit)) et (F2.MDT+F2.MST)*F2.débit.

 

Une idée ?


Message édité par smilm le 02-01-2011 à 14:04:36
n°2045582
mrbebert
Posté le 02-01-2011 à 14:16:58  profilanswer
 

Ca n'a pas l'air simple [:mcwammed]  
 
Déjà, elle sert à quoi la table G2 ? J'ai l'impression que tu pourrais l'enlever, à moins que ce ne soit une erreur dans la clause WHERE.
 
Ensuite, pour simplifier, il est peut être possible d'écrire la requête sous la forme :
SELECT SUM( (MDT+MST)*débit ) Total
FROM Flux
WHERE Flux.Bassin IN ( ... )
 
En mettant dans le IN ce qui renvoie la liste des "Bassin" qui t'intéressent :)


---------------
Doucement le matin, pas trop vite le soir.
n°2045587
flo850
moi je
Posté le 02-01-2011 à 14:25:21  profilanswer
 

mais pourquoi ne pas faire  
 
SELECT (SUM((MDT+MST)*débit)) As Total
FROM Flux  left outer join  Gems on  Flux.Bassin = Gems.Bassin
WHERE  ocean IN('NAT','SAT')  OR  bassin='Amazonas'

n°2045588
smilm
Posté le 02-01-2011 à 14:25:23  profilanswer
 

Pas vraiment simple en effet.
 
Si je procède comme tu le propose, sans préciser F1 ou F2 devant les champs que je selectionne, cela entraine une erreur: MDT, MST et débit sont ambigue: on ne sait pas s'ils proviennent de F1 ou de F2.
 
Une autre piste peut être, en utilisant des requètes imbriqués et UNION.
 
 
SELECT SUM(pts) AS total
FROM ((SELECT ((MDT+MST)*débit) as pts
FROM TblFlux as F, TblGemsInfoBassins as G
WHERE F.Bassin = G.Bassin AND F.bassin='Amazonas')
UNION ALL
(SELECT SUM((MDT+MST)*débit) as pts
FROM TblFlux as F, TblGemsInfoBassins as G
WHERE F.Bassin = G.Bassin AND ocean IN('NAT','SAT')))
 
Cela me renvoi une "erreur de l'opération JOIN".
Qu'en pensez vous ?

n°2045592
mrbebert
Posté le 02-01-2011 à 14:34:10  profilanswer
 

smilm a écrit :

Pas vraiment simple en effet.
 
Si je procède comme tu le propose, sans préciser F1 ou F2 devant les champs que je selectionne, cela entraine une erreur: MDT, MST et débit sont ambigue: on ne sait pas s'ils proviennent de F1 ou de F2.

Je n'ai qu'une table Flux dans ma requête [:proy]  
 

smilm a écrit :


Une autre piste peut être, en utilisant des requètes imbriqués et UNION.
 
SELECT SUM(pts) AS total
FROM ((SELECT ((MDT+MST)*débit) as pts
FROM TblFlux as F, TblGemsInfoBassins as G
WHERE F.Bassin = G.Bassin AND F.bassin='Amazonas')
UNION ALL
(SELECT SUM((MDT+MST)*débit) as pts
FROM TblFlux as F, TblGemsInfoBassins as G
WHERE F.Bassin = G.Bassin AND ocean IN('NAT','SAT')))
 
Cela me renvoi une "erreur de l'opération JOIN".
Qu'en pensez vous ?

J'en pense qu'il y a trop de FROM :D  


---------------
Doucement le matin, pas trop vite le soir.

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

  SQL: une somme toute bête

 

Sujets relatifs
[SQL] - Restauration sans NDF ?Problème pour créer la requête SQL demandée
[RM COBOL 7.5 & SQLSVR] Injection données COBOL dans SQL Server[SQL] "Arrêter prématurément" une requête
[Excel] somme conditionelle su deux colonnes ?Urgent : Récupérer fichier .db de base SQL Anywhere 5
Programmation SQL Important'getAttribute' tout bête, mais qui ne passe pas
Formulaire et requete SQLVulnérabilité SQL
Plus de sujets relatifs à : SQL: une somme toute bête


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