Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/12/2011, 12h43   #1
Membre du Club
 
Homme
Inscription : novembre 2006
Messages : 227
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 53

Informations forums :
Inscription : novembre 2006
Messages : 227
Points : 56
Points : 56
Par défaut requête tri et regroupement

Bonjour,
Je souhaiterai réaliser le projet ci-dessous.
Voici*:
J’ai une table avec les champ suivant Numsérie, Libellé, Activité dans laquelle j’ai les données suivantes (ceci est un Ex car il y a beaucoup plus de données.)

Numsérie Libellé Activité
  AAA    Piece2    32
  BBB    Piece1    9 
  CCC    Piece3    13
  DDD    Piece1    35
  EEE    Piece3    37
  FFF    Piece2    14
Je voudrais au moyen soit d’une requête ou en VBA je ne sais pas quelle est la plus efficace et la plus simple des solutions (quelqu’un peut il m’aiguiller) obtenir en final un tri et classement comme suit:

Numsérie Libellé Activité
   BBB   Piece1    9
   FFF   Piece2    14 
   CCC   Piece3    13
   DDD   Piece1    35
   AAA   Piece2    32
   EEE   Piece3    37
C'est-à-dire un tri sur le champ "libellé" par ordre (Piece1, Piece2, etc… ) et un regroupement par valeurs identiques à + / - quelque choses (une valeur que je puisse déterminer par ex: 5) sur le champ "Activité"

J’avoue que je n’ai aucune compétence et que je ne connais rien en requête ou en VBA pour réaliser cette fonction.
Si quelqu’un pouvais m’aider?
Merci par avance à tous.
nomade333 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 21h53   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
Pourrais-tu détailler un peu plus comment tu passes de tes données initiales aux données triés ?

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 06h24   #3
Membre du Club
 
Homme
Inscription : novembre 2006
Messages : 227
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 53

Informations forums :
Inscription : novembre 2006
Messages : 227
Points : 56
Points : 56
Bonjour,
C'est à dire que je n'ai rien trié c'est que que je souhaiterai faire?
Merci
nomade333 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 18h46   #4
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
Oui j'avais compris :-) mais je n'arrive pas à comprendre comment, même à la main, faire ce tri ? Et c'est assez dur d'automatiser un truc qu'on ne sait même pas faire à la main.

Donc quel est le 1er critère, quel est le 2ième critères comment les utilises-tu ?

Par exemple :
  • Je regarde si le numéro de série est plus petit que le précédent, dans ces cas là je classe l'enregsitrement avant.
  • Je regarde si le numéro de pièce est plus grand que le précédent et le numéro de série plus petit et dans ce cas là je place l'enregistrement avant.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 00h16   #5
Membre du Club
 
Homme
Inscription : novembre 2006
Messages : 227
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 53

Informations forums :
Inscription : novembre 2006
Messages : 227
Points : 56
Points : 56
Bonsoir,
En fait pour plus de clarté voici les champs exacts de ma table.
Le Numsérie n'est pas important.
Citation:
Moteur Numsérie Libellé Activité
60004 Disque1 9
60004 Disque2 32
60004 Disque3 13
60006 Disque1 35
60006 Disque2 14
60006 Disque3 37
Donc se serai de scruter la table de prendre Disque1 du 60004,Disque2 du 60006, Disque3 du 60004 (quitte en en faire une table) puis scruter à nouveau et de prendre Disque1 du 60006, disque2 du 60004 et disque3 du 60006 etc....
Donc le critère 1 est "Activité" et le critère 2 "Libellé".
Le tri s'effectue sur "Activité" pour des valeurs sensiblement égalent.
L'ordre de "Libellé" n'est pas essentiel car je pourrai effectuer un tri dessus une fois le resultat obtenu.
rien n'empeche d'avoir:
Citation:
Moteur Numsérie Libellé Activité
60006 Disque2 14
60004 Disque3 13
60004 Disque1 9
60006 Disque3 37
60006 Disque1 35
60004 Disque2 32
Sachant que je peux couper cette table en plusieurs requêtes basé sur le "Moteur".
Je ne sais pas si cela te permettra d'y voir plus clair et de t'aider.
Toute fois merci de ton attention et de ton aide.
Ps:
Je ne sais pas utiliser la fonction "quote" désolé.
nomade333 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 18h52   #6
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
Désolé j'ai vraiment la comprenette dure mais est-ce qu'un simple tri sur l'activité ne résoudrait pas ton problème.

Access n'as pas vraiment la notion de "proche" intégrée. Tu pourrais peut-être travailler avec une tranches fixes de valeur ? Par exemple la tranche des 5 à 10, des 10 à 15 et ainsi de suite. Ça c'est assez facile à faire.

Par contre si tu as besoin de l'enregistrement dont la différence avec le suivant est compris entre -5 et +5 je ne vois pas de solution simple à part écrire du VBA qui va faire cela :
Parcourir ta table, identifier les éléments de base, puis parcourir de nouveau ta table pour trouver ce qui sont à +/- x de ta base et recommencer jusqu'à épuisement de la table en utilisant un nouvelle table pour enregistrer les résultat au fur et à mesure.
A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 20h32   #7
Membre du Club
 
Homme
Inscription : novembre 2006
Messages : 227
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 53

Informations forums :
Inscription : novembre 2006
Messages : 227
Points : 56
Points : 56
bonsoir,
Pas grave!
Merci quand même pour le temps consacré.
nomade333 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 11h52   #8
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 184
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 184
Points : 2 814
Points : 2 814
Bonjour nomade333 et René,

Je me permets de m'immiscer...

C'est dommage d'abandonner !... non ?

A la vue de ton premier exemple
Code :
1
2
3
4
5
6
7
Numsérie Libellé Activité
  AAA    Piece2    32
  BBB    Piece1    9 
  CCC    Piece3    13
  DDD    Piece1    35
  EEE    Piece3    37
  FFF    Piece2    14
doit devenir :
Code :
1
2
3
4
5
6
7
Numsérie Libellé Activité
   BBB   Piece1    9
   FFF   Piece2    14 
   CCC   Piece3    13
   DDD   Piece1    35
   AAA   Piece2    32
   EEE   Piece3    37
voici ce que je comprends de ce qu'il faut faire :
  • une première requête R1 groupée (et triée) sur "Libellé" : donne la liste de tous les libellés avec une ligne par libellé ;
  • donner, dans l'ordre de R1, et par bloc de l'ensemble des lignes de R1, la correspondance existante avec la table d'origine.
==> je ne sais pas si c'est bien clair...

En pièce jointe, une petite base de test : la requête Union donne un des résultats escompté (ne pas lancer R2 !...).
Fichiers attachés
Type de fichier : zip Exemple.zip (10,6 Ko, 2 affichages)
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 14h29   #9
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour nomade333,

D'après ce que j'ai compris, ce que te suggère Richard_35 me semble très pertinent.
En fait, il est nécessaire, au départ que tu sache définir précisément la segmentation de ta population.
Par exemple, ici, il semblerait que tu veuilles regrouper tes population par un ordre de grandeur de volume, ( entre 0 et 10, entre 10 et 20, etc ...)
Pour cela, tu peux effectuer de plusieurs manières :
Si tu suis la méthode de Richard_35, tu crée autant de requête que de population, et ensuite tu termine par une requête UNION.

ex :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Requete1 : SELECT Numsérie, Libellé, Activité FROM ma_table where 
Activité < 10 order by activité DESC;
 
Requete2 : SELECT Numsérie, Libellé, Activité FROM ma_table where 
Activité between  10  and 19 order by activité DESC;
 
Requete3 : SELECT Numsérie, Libellé, Activité FROM ma_table where 
 Activité between  20  and 29 order by activité DESC;
 
Requete4 : SELECT Numsérie, Libellé, Activité FROM ma_table where 
Activité > 30 order by activité DESC;
 
 
requete5 : select * from Requete1
               UNION 
select * from Requete2
               UNION 
select * from Requete3
               UNION 
select * from Requete4;
La 2ème methode

Code :
1
2
3
Requête1 :
SELECT Numsérie, Libellé, Activité, iff(Activité<10,'a',iff(Activité between 10 and 19,'b',iff(Activité between 20 and 29,'c','d'))) as categorie
FROM Ma_table ORDER by categorie ASC, Activité DESC;
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h50.


 
 
 
 
Partenaires

Hébergement Web