Requête SQL sur une même table [Résolu]

Signaler
Messages postés
8
Date d'inscription
jeudi 10 février 2011
Statut
Membre
Dernière intervention
18 mai 2011
-
Messages postés
8
Date d'inscription
jeudi 10 février 2011
Statut
Membre
Dernière intervention
18 mai 2011
-
Bonsoir,

J'ai un petit problème pour une requête SQL,

J'ai cherché tout l'après-midi et je n'y suis pas arrivé, j'ai l'impression de n'être pas loin de la solution ^^

En gros j'ai une table T_ECARTectraChimie, dans laquelle je veux verifier que pour un PART et son BATCH, la somme de la quantité des ECarts dans SAP est égal à la somme de la quantité des Ecarts dans PRESTA

SELECT T_ECARTECTRAChimie.BATCH_ECART
FROM T_ECARTECTRAChimie
where ((PROVENANCE_ECART = "PRESTA" and sum(QUANTITE_ECART)))=
 (SELECT T_ECARTECTRAChimie.BATCH_ECART
FROM T_ECARTECTRAChimie
where ((PROVENANCE_ECART = "SAP" and sum(QUANTITE_ECART))));


le petit problème c'est que je ne peux aps utiliser de fonction agrégat dans le Where, donc je peux utiliser un Having, mais du coup je ne sais pas comment faire la jointure interne de cette table pour qu'à la sortie il me donne les Batch dont leur quantités chez SAP sont égales à celles chez PRESTA.

Il faut savoir que pour une même BATCH, chez SAP on a par exemple 630 en quantité et chez PRESTA 630 aussi mais reparti sur plusieurs localisation, d'où le sum(...).

Merci de votre aide

5 réponses

Messages postés
14727
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
29 septembre 2020
144
Bonjour,

Ce n'est pas des bases "virtuelles", mais un alias d'une table.

Mon site
Messages postés
14727
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
29 septembre 2020
144
Bonjour,

Essayes de faire de ta table un alias dans ta requête :
Select ... From MaTable T WHERE ...=(SELECT ... FROM MaTable S WHERE ...)

S et T sont 2 identifiants de ta table.

Mon site
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Salut

Perso, j'aurai tenté ça :
Select T1.BATCH_ECART
  From T_ECARTECTRAChimie T1, 
       T_ECARTECTRAChimie T2
 Where T1.BATCH_ECART         = T2.BATCH_ECART
   And T1.PROVENANCE_ECART    = "PRESTA" 
   And T2.PROVENANCE_ECART    = "SAP" 
   And Sum(T1.QUANTITE_ECART) = Sum(T2.QUANTITE_ECART)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
8
Date d'inscription
jeudi 10 février 2011
Statut
Membre
Dernière intervention
18 mai 2011

merci vous deux :), je testerai au boulot demain matin !!
Je ne savais pas qu'on pouvait créer une base "virtuelle"
Messages postés
8
Date d'inscription
jeudi 10 février 2011
Statut
Membre
Dernière intervention
18 mai 2011

D'accord,

je viens de tester le code SQL de jack, et ça ne marche pas car on ne peut pas avoir un aggregat dans une fonction Where.
Du coup j'ai pensé au Having, avec le code suivant :

SELECT T1.BATCH_ECART
FROM T_ECARTECTRAChimie AS T1, T_ECARTECTRAChimie AS T2
WHERE (T1.BATCH_ECART=T2.BATCH_ECART And T1.PROVENANCE_ECART="PRESTA" And T2.PROVENANCE_ECART="SAP")
HAVING (Sum(T1.QUANTITE_ECART)=Sum(T2.QUANTITE_ECART));


Mais je ne peux pas car :
" vous êtes entrain d'essayer d'executer une requête qui n'inclus pas l'expression BATCH_ECART comme une fonction d'aggrégat.

Du coup je ne vois pas comment débuger le code ^^

Vous avez une idée?