[Résolu] Problème de requête

Problème de requête [Résolu] - SQL/NoSQL - Programmation

Marsh Posté le 04-03-2010 à 14:07:39    

Bonjour,  
 
Je suis actuellement sous Access 2000, et j'ai un petit problème de requete.
 
Soit la table T (num, date, code)
avec les valeurs suivantes :  

Code :
  1. 11111 01/01/2009 PAAAAA
  2. 11111 01/01/2009 OAAAAA
  3. 22222 01/02/2009 PAAAAA
  4. 33333 01/05/2009 PAAAAA
  5. 44444 01/04/2009 OAAAAA
  6. 44444 01/04/2009 PAAAAA
  7. 44444 01/03/2009 PAAAAA
  8. 44444 01/03/2009 OAAAAA
  9. 44444 01/03/2009 PAAAAA
  10. 44444 01/03/2009 PAAAAA
  11. 44444 01/03/2009 OAAAAA


 
Je tente de récupérer l'ensemble des lignes (num, date) pour lesquelles :  
il existe un code commencant par P et pas de code commencant par O correspondante
 
Par exemple, les num 22222 et 33333 sont retournées (il y a un P, mais pas de O)
Pas de problème pour ces deux là.
 
Mais je galère plus lorsqu'il y a des O, mais que le nombre de P est supérieur.
Par exemple, je devrais également récupérer la ligne  

Code :
  1. 44444 01/03/2009 PAAAAA


car pour ce couple (num, date) il existe un P pour lequel il n'y a pas de O.
 
J'ai beaucoup de mal à voir comment construire ma requete.
Si quelqu'un avait un petit coup de pouce, une direction dans laquelle m'orienter (intersect, having ?)
Pas une solution toute faite, j'préfère trouver avec un peu d'aide :)
 
Merci


Message édité par gocho le 04-03-2010 à 17:17:01
Reply

Marsh Posté le 04-03-2010 à 14:07:39   

Reply

Marsh Posté le 04-03-2010 à 14:45:38    

Ca passe mais avec deux requetes, une j'ai po trouvé :)
 
La premiere est une requete analysé croisée.
 
La seconde exploite la premiere, contient un champ calculé et renvoie la bonne table.

Reply

Marsh Posté le 04-03-2010 à 15:33:09    

Les requetes access ca marche comment? Tu peux les faires en SQL?


---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 04-03-2010 à 15:35:50    

strop bien tu fais tout à la souris pour ceux comme moi qui peuvent pas blairer le sql ^^, pour la création d'une requete, tu choisis un mode "cliquodrome" ou un mode sql tradi.


Message édité par rengzehn le 04-03-2010 à 15:36:32
Reply

Marsh Posté le 04-03-2010 à 16:39:04    

j'avoue que j'ai un peu de mal avec le "cliquodrome", je passe souvent par le sql dès que ca devient un peu relou ^^
 
analyse croisée ? je vais voir comment ca marche :p
 
edit: ca donne quoi comme mot clé l'analyse croisée ?


Message édité par gocho le 04-03-2010 à 16:39:25
Reply

Marsh Posté le 04-03-2010 à 17:01:39    

Ah oki, je pense commencer à comprendre.
 
J'ai donc fait une requete croisée avec :
num, date : en tete de ligne
code : en tete de colonne
code : valeur
 
du coup, j'obtiens ceci :  

Code :
  1. num      date               OAAAAA              PAAAAA
  2. 11111    01/01/2009            1             1
  3. 22222    01/02/2009                         1
  4. 33333    01/05/2009                         1
  5. 44444    01/03/2009            2             3
  6. 44444    01/04/2009            1             1


 
 
et après, avec la seconde, je n'ai plus qu'à recupérer toutes les lignes pour lesquelles PAAAAA est supérieure à OAAAA
 
Excellent, je connaissais vraiment pas du tout cette fonctionnalité !  
 
Merci :)
 
edit : et bien entendu penser dans le champ calculé à verifier que c'est > 0 ou null.
Vu que certaines valeurs ne sont pas renseignées, donc nulles ^^
 
Encore merci :)

Message cité 1 fois
Message édité par gocho le 04-03-2010 à 17:07:06
Reply

Marsh Posté le 04-03-2010 à 17:07:22    

Après P et O, c'est forcément AAAA ou ca peut etre autre chose?
Sinon en SQL Oracle, ca donnerait un truc comme ca (de tete hin, pas taper si ya des erreurs):
select p.num, p.date  
from (select num, date, substr(code,2) code from t where code like 'P%') p, (select num, date, substr(code,2) code from t where not(code like 'O%')) o
where p.num = o.num and p.date = o.date and p.code = o.code
 
C'est simplifiable si tu t'attends à avoir que des AAAA.


---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 04-03-2010 à 17:10:55    

il n'y a pas que des AAA à priori ^^

Reply

Marsh Posté le 04-03-2010 à 17:17:41    


gocho a écrit :

Ah oki, je pense commencer à comprendre.

 

J'ai donc fait une requete croisée avec :
num, date : en tete de ligne
code : en tete de colonne
code : valeur

du coup, j'obtiens ceci :

Code :
  1. num      date               OAAAAA              PAAAAA
  2. 11111    01/01/2009            1             1
  3. 22222    01/02/2009                         1
  4. 33333    01/05/2009                         1
  5. 44444    01/03/2009            2             3
  6. 44444    01/04/2009            1             1
 


et après, avec la seconde, je n'ai plus qu'à recupérer toutes les lignes pour lesquelles PAAAAA est supérieure à OAAAA

 

Excellent, je connaissais vraiment pas du tout cette fonctionnalité !

 

Merci :)

 

edit : et bien entendu penser dans le champ calculé à verifier que c'est > 0 ou null.
Vu que certaines valeurs ne sont pas renseignées, donc nulles ^^

 

Encore merci :)

 

yep exactement ça que j'avais fait :jap:


Message édité par rengzehn le 04-03-2010 à 17:17:58
Reply

Sujets relatifs:

Leave a Replay

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