Requete SQL Access avec conditions sur plusieurs lignes

Requete SQL Access avec conditions sur plusieurs lignes - Logiciels - Windows & Software

Marsh Posté le 25-06-2010 à 14:47:23    

Bonjour,  
 
je travaille sur une table unique où sont regroupées des données représentant différentes choses.
Pour simplifier, je vais illustrer avec un exemple très simple. Disons une table ou on aurait, pour chaque type de produit, le nombre de vente et le nombre d'achat.
 
la table a donc trois colonnes :  
la première avec le nom du produit
la deuxième avec la quantité  
la troisième avec 1 si il s'agit des vente et 2 si il s'agit des achats.  
 
Exemple avec 3 produits A, B et C  
A     1000    1  
A      500    2
B         0     1
B       400    2
C         0     1
C         0     2
 
Est-il possible d'avoir une requete affichant les produits pour lequel les ventes sont nuls et pas les achats ?  
Dans l'exemple  B      400    2      (ou même juste B)
 

Reply

Marsh Posté le 25-06-2010 à 14:47:23   

Reply

Marsh Posté le 25-06-2010 à 15:15:45    

Oui, c'est possible.
On prend deux fois la même table, mais on utilise des alias pour séparer ce que l'on veut, sans oublier de les lier sur la clef commune.
 
Par exemple :

Select
       T_achat.nom_du_produit
  from
       table_achat_vente T_achat,
       table_achat_vente T_vente
where
      T_vente.flag_achat_vente = 1
  and T_vente.quantite_achat_ou_vente = 0
  and T_achat.flag_achat_vente = 2
  and T_achat.quantite_achat_ou_vente > 0
  and T_vente.nom_du_produit = T_achat.nom_du_produit


Reply

Marsh Posté le 25-06-2010 à 16:12:12    

Merci de la réponse rapide.
 
Voila ma table (achatvente):  
 
N° Champ1 Champ2 Champ3
1 A 1000 1
2 A 500 2
3 B 300 1
4 B 0 2
5 C 0 1
6 C 0 2
 
 
et ma requete :  
 
SELECT T_achat.[1]
FROM achatvente AS T_achat, achatvente AS T_vente
WHERE T_vente.[3]=2 And T_vente.[2]=0 And T_achat.[3]=1 And T_achat.[2]>0 And T_vente.[1]=T_achat.[1];

 
 
Quand je veux exécuter, Access me demande d'entrer la valeur des différents paramètres T_achat.1 ....
et renvoir une table vide si je ne rentre rien.
 
Une idée du problème ?


Message édité par cajamarquino le 25-06-2010 à 16:23:46
Reply

Marsh Posté le 25-06-2010 à 16:31:10    

Les colones ne s'appellent pas par des numéros mais par des noms.
Entre crochets, il faut mettre les noms des colonnes au lieu de numéros.
Les crochets ne sont nécessaires que si les noms des colonnes contiennent des espaces.

Reply

Marsh Posté le 25-06-2010 à 16:51:45    

Oui merci j'avais oublié ce point.
 
ça marche bien merci.
 
Par contre, est-il possible d'exclure une ligne de cette recherche.
Car dans la table sur laquelle je travaille, il y a une première ligne avec le nom des champs comme ci dessous :  
 
N° Champ1 Champ2 Champ3  
1 produit   quantite    type
2    A          1000         1  
3    A            500         2  
4    B            300         1  
5    B              0          2  
6    C              0          1  
7    C              0          2  
 
 
 
Cela fait que Access me renvoit l'erreur suivante :  
 
"Type de données incompatible dans l'exécution du critère."

Reply

Marsh Posté le 25-06-2010 à 17:11:44    

Oui, on peut exclure cette ligne en appliquant une restriction dans la clause Where.
Par exemple :
SELECT T_achat.[produit]  
FROM achatvente AS T_achat, achatvente AS T_vente  
WHERE T_vente.[type]=2 And T_vente.[quantite]=0 And T_achat.[type]=1 And T_achat.[quantite]>0 And T_vente.[produit]=T_achat.[produit]
and T_achat.[produit] <> "produit";
 
ou
 
and T_achat.[N°] <> 1;
 
Différent est <>, si je me souviens bien, ou !=

Reply

Marsh Posté le 25-06-2010 à 17:18:54    

J'y avais pensé mais apparemment la restriction dans le WHERE ne l'empêche pas d'aller tester les champs et donc l'erreur persiste.

Reply

Marsh Posté le 30-06-2010 à 10:18:15    

cajamarquino a écrit :

J'y avais pensé mais apparemment la restriction dans le WHERE ne l'empêche pas d'aller tester les champs et donc l'erreur persiste.


 :??:  
 
La réponse d'olivthill est conforme a ta demande...

Citation :

and T_achat.[produit] <> "produit";  
 
ou  
 
and T_achat.[N°] <> 1;


---------------
Soyez malin, louez entre voisins !
Reply

Sujets relatifs:

Leave a Replay

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