Requête champs calculés

Requête champs calculés - SQL/NoSQL - Programmation

Marsh Posté le 02-05-2006 à 18:11:40    

Bonjour,  
j'ai une table qui regroupe des identifiants avec des valeurs:
tableC
Idcouleur|Idvoiture|Idperiode|Valeur
1| 4| 1| 16
1| 4| 3| 15
1| 43| 1| 789
1| 43| 3| 90
2| 4| 1| 10
2| 4| 3| 25
2| 43| 1| 80
2| 43| 3| 20

 

Je voudrai créer une nouvelle table en faisant des champs calculés de la table ci-dessus

 

voici ce que j'aimerai obtenir:
 
IdCouleurRes |ValRougePrintemps
1  |Valeur(Idcouleur=1 et Idperiode=1) + Valeur(Idcouleur=2 et Idperiode=3)

 

Comment puis-je faire cela ???
 
Merci à tous pour votre aide

Reply

Marsh Posté le 02-05-2006 à 18:11:40   

Reply

Marsh Posté le 02-05-2006 à 23:27:29    

SELECT SUM(valeur)
FROM tableC
WHERE (Idcouleur=1 AND Idperiode=1)
OR (Idcouleur=2 AND Idperiode=3);

Reply

Marsh Posté le 03-05-2006 à 11:52:58    

Salut, dsl pour les oublis, je pense que je n'ai pas été très clair dans mon dernier post ce qui fait que je me heurte toujours à des soucis
J'avais essayé de prendre un exemple plus simple mais en fait, il paraît plus complexe...
 
JE SUIS SUR ACCESS
 
ALors voici mon pb:
 
J'ai actuellement la table suivante:
 
DataComptables
 
IdIndicateur|IdFiliale|Code|IdPeriode|Annee|Valeur
1 |4|Cod1|1|2005|15  
1 |4|Cod1|3|2005|20
1 |43| Cod2|1|2005|25
1 |43 |Cod2|3|2005|75
 
2 |4|Cod1|1|2005|30
2 |4|Cod1|3|2005|45
2 |43|Cod2|1|2005|90
2 |43|Cod2|3|2005|10
 
 
J'aimerai obtenir la table suivante:
 
NouvelIndicateur|IdFiliale|Code|IdPeriode|Annee|Valeur
3|4|Cod1|1|2005|45(15+30)
3|4|Cod1|3|2005|65(20+45)  
3|43|Cod2|1|2005|115(25+90)
3|43 |Cod2|3|2005|85(75+10)
 
J'espère que vous pourrez m'aider,
 
D'avance merci...

Reply

Marsh Posté le 03-05-2006 à 12:10:23    

SELECT IdFiliale,Code,IdPeriode,Annee,SUM(valeur)
FROM DataComptables  
GROUP BY IdFiliale,Code,IdPeriode,Annee;
 
Et pour le nouvel indicateur, j'imagine que tu veux l'id maxi + 1 ?
 
Dans ce cas, une requête à part :
 
SELECT MAX(IdIndicateur) + 1 FROM DataComptables;
 
(ou si Access le permet :
 
SELECT (SELECT MAX(IdIndicateur) + 1 FROM DataComptables) AS NouvelIndicateur,IdFiliale,Code,IdPeriode,Annee,SUM(valeur)
FROM DataComptables  
GROUP BY IdFiliale,Code,IdPeriode,Annee;


Message édité par Beegee le 03-05-2006 à 12:11:05
Reply

Marsh Posté le 03-05-2006 à 12:17:18    

Merci Beegeee, euh...non ct pas forcément l'id maxi + 1, ct juste un identifiant dans la nouvel table...je me suis encore mal exprimé...lol
 
Merci,@+

Reply

Marsh Posté le 03-05-2006 à 13:13:04    

En fait, j'ai parlé trop vite...
 
Ce qu'il me manque c'est comment faire pour additionner juste l'indicateur 1 et 2 car en fait j'ai beaucoup plus d'indicateurs dans ma tables et qui ne doivent pas être additionner ensemble...
 
merci

Reply

Marsh Posté le 03-05-2006 à 13:22:23    

SELECT IdFiliale,Code,IdPeriode,Annee,SUM(valeur)
FROM DataComptables
WHERE IdIndicateur IN (1,2)
GROUP BY IdFiliale,Code,IdPeriode,Annee;

Reply

Marsh Posté le 03-05-2006 à 13:27:12    

Exact !!!! Yes, merci merci !!!!

Reply

Marsh Posté le 03-05-2006 à 13:40:37    

Encore une dernière chose, j'ai encore le pb suivant qui se présente à moi:
 
je dois additionner  2 indicateurs comme tu viens de la faire mais je dois aussi en soustraire....
 
Ex (je sais que la syntaxe est incorrect mais c'est pour mieux me faire comprendre...)
 
SELECT IdFiliale,Code,IdPeriode,Annee,SUM(valeur)  
FROM DataComptables  
WHERE IdIndicateur IN (1,2) - (3,4) -> (1+2) - (3+4)  
GROUP BY IdFiliale,Code,IdPeriode,Annee;  
 
Comme pourrait-on arranger la requête ?
 
merci

Reply

Marsh Posté le 03-05-2006 à 14:43:36    

Si j'ai bien compris, tu veux additionner quand l'indicateur est 1 ou 2, et soustraire quand il vaut 3 ou 4, et ne pas te préoccuper des autres indicateurs ? Alors il faut utiliser le mot-clé IIF.
 
Je propose donc (j'ai jamais utilisé Access mais j'ai regardé rapidement sur le net :D ) :
 
SELECT IdFiliale,Code,IdPeriode,Annee,SUM(IIF IdIndicateur IN (1,2) THEN valeur ELSE (-valeur))
FROM DataComptables  
WHERE IdIndicateur IN (1,2,3,4)
GROUP BY IdFiliale,Code,IdPeriode,Annee;

Reply

Marsh Posté le 03-05-2006 à 14:43:36   

Reply

Marsh Posté le 03-05-2006 à 15:04:51    

merci encore une fois beegee, c'est exactement cela
 
@++

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed