Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
718 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Clause Distinct sous Access

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Clause Distinct sous Access

n°2064613
hardsessio​n
Certifié Breton
Posté le 18-03-2011 à 10:49:47  profilanswer
 

Bonjour à tous,
J'ai récupéré une base de données en désordre et je bute actuellement sur une requète sql, par rapport à l'option DISTINCT ON.
Dans la base ma table ressemble à ça :
 
IdObjet            | TechRubrique   |  Valeur
1256                | 172                | 2003/05/21
1256                | 121                | POSTE12
1256                | 192                | Durand
1256                | 240                | HP
1357                | 172                | 2005/06/03
1357                | 121                | POSTE13
1357                | 192                | MARTIN
... Et ainsi de suite.
 
J'aimerais récupérer uniquement récupérer pour tous les postes le numéro de poste (IdObjet), le nom de poste (POSTE12) et la date de mise en service de ce poste. Voici le résultat que je voudrais avoir :
 
IdObjet            |  Valeur
1256               | 2003/05/21
                     | POSTE12
1357               | 2005/06/03
                      | POSTE13
 
La requète que j'utilise est la suivante :
 
SELECT DISTINCT ON (dbo_Materiel.IdObjet) dbo_Materiel.IdObjet, dbo_Materiel.Valeur
FROM dbo_Materiel
WHERE dbo_Materiel.TechRubrique Like '172'  
OR dbo_Materiel.TechRubrique Like '121'
ORDER BY dbo_Materiel.IdObjet, dbo_Materiel.Valeur;
 
Lorsque je veux l'exécuter ou l'enregistrer, access me renvoie ce message :
"Erreur de syntaxe (opérateur absent) dans l'expression 'ON  (dbo_Materiel.IdObjet) dbo_Materiel.IdObjet'.
 
Malgré quelques heures passées sur la toile à chercher des infos sur le DISTINCT ON, je n'ai rien trouvé qui puisse faire fonctionner correctement ma requète, je fais donc appel à vous pour une petit coup de main ;)

mood
Publicité
Posté le 18-03-2011 à 10:49:47  profilanswer
 

n°2064614
Je@nb
Kindly give dime
Posté le 18-03-2011 à 13:06:28  profilanswer
 

Ce sujet a été déplacé de la catégorie Systèmes & Réseaux Pro vers la categorie Programmation par Je@nb

n°2064672
hardsessio​n
Certifié Breton
Posté le 18-03-2011 à 15:50:15  profilanswer
 

Personne?

n°2064679
lasnoufle
La seule et unique!
Posté le 18-03-2011 à 16:22:18  profilanswer
 

Salut,
 
Je connais pas access, mais j'ai l'impression que ce que tu veux faire n'a pas trop de "sens" vu du coté SQL. En gros, est-ce que ca ne serait pas plus pratique pour toi d'avoir 3 colonnes dans ton résultat: IdObjet, NomPoste, DateMiseEnService?
 
Sinon, ca te donne quoi le résultat de ca, sans le distinct on?

SELECT dbo_Materiel.IdObjet, dbo_Materiel.Valeur
FROM dbo_Materiel
WHERE dbo_Materiel.TechRubrique Like '172'  
OR dbo_Materiel.TechRubrique Like '121'
ORDER BY dbo_Materiel.IdObjet, dbo_Materiel.TechRubrique desc;


De tete comme ca, ca devrait te donner ca (pour reprendre ton exemple):
IdObjet           |  Valeur
1256               | 2003/05/21
1256               | POSTE12
1357               | 2005/06/03
1357               | POSTE13  
Ca te va pas?


---------------
C'était vraiment très intéressant.
n°2064683
hardsessio​n
Certifié Breton
Posté le 18-03-2011 à 16:41:15  profilanswer
 

Il est vrai que l'affichage n'est pas ce qu'il y a de mieux, de mon point de vue aussi... Mais étant en contrat pro dans une grosse boîte, et pour diverses raisons, je suis obligé de travailler sur cette base de données, qui, pour moi, est plus une usine à gaz qu'autre chose, et je n'ai d'autre choix que de continuer en ce sens, malgré le fait d'en avoir parlé à mon tuteur.
Bref, l'affichage qu'on souhaiterai récupérer c'est que pour chaque numéro de poste, on veut avoir à la fois le nom du poste et la date de mise en service (qui hélas ne pourront être affichés uniquement sur deux colonnes plutôt que trois), comme ceci :
IdObjet            |  Valeur
1256               | 2003/05/21
                     | POSTE12
1357               | 2005/06/03
                      | POSTE13  
 
Pour obtenir le résultat souhaité, j'aurais voulu le faire par requête SQL, car à mon niveau c'est ce qui me paraissait le plus simple, plutôt que de créer un exécutable en vbs attaquant la BDD mysql en liaison ODBC (de la même manière qu'Access), exécutable qui renverrait tout dans un fichier texte avec un format d'affichage en 3 colonnes...
 
Sans le DISTINCT ON, j'ai en gros, grâce à cette commande le résultat suivant :
SELECT dbo_Materiel.IdObjet, dbo_Materiel.Valeur
FROM dbo_Materiel
WHERE dbo_Materiel.TechRubrique Like '172'  
OR dbo_Materiel.TechRubrique Like '121'
GROUP BY dbo_Materiel.IdObjet, dbo_Materiel.Valeur;
 
Donc en gros le même résultat que tu me proposais :
 
IdObjet           |  Valeur
1256               | 2003/05/21
1256               | POSTE12
1357               | 2005/06/03
1357               | POSTE13  
 
Pour ma part, je me serais limité à ce résultat mais, mon tuteur, à nouveau, veut pour plus de clarté qu'on supprime les doublons de la colonne IdObjet, de cette manière :
 
IdObjet            |  Valeur
1256               | 2003/05/21
                     | POSTE12
1357               | 2005/06/03
                      | POSTE13  
 
Quelle solution serait la meilleure à adopter? Avec le Distinct ON je galère vu que je respecte la syntaxe affichée sur un des rares sites qui parle de cette option (avec le ON), et que malgré tout la commande ne passe pas, et je n'en trouve pas la cause du problème.

n°2064686
lasnoufle
La seule et unique!
Posté le 18-03-2011 à 17:00:29  profilanswer
 

Ben si c'est que pour l'affichage, il doit surement y avoir moyen de partir de la requete que je t'ai donnée (qui affiche "deux fois" IdObjet) et de "cacher" IdObject sur certaines lignes.
Je connais pas la syntaxe Access, en SQL Oracle ca donnerait un truc du genre, à toi d'adapter (j'sais pas si ya un CASE en access, p'tetre avec des IF?)

SELECT CASE WHEN dbo_Materiel.TechRubrique Like '172' THEN dbo_Materiel.IdObjet ELSE null END as IdObjet, dbo_Materiel.Valeur
FROM dbo_Materiel
WHERE dbo_Materiel.TechRubrique Like '172'  
OR dbo_Materiel.TechRubrique Like '121'
ORDER BY dbo_Materiel.IdObjet, dbo_Materiel.TechRubrique desc;


En gros, tu n'affiches l'ID que si la TechRubrique vaut 172, sinon t'affiches du vide.


---------------
C'était vraiment très intéressant.
n°2065732
hardsessio​n
Certifié Breton
Posté le 24-03-2011 à 09:49:39  profilanswer
 

J'ai essayé ta commande mais ce la ne fonctionne pas... J'ai aussi trouvé d'autres infos sur ce site http://sqlpro.developpez.com/cours/sqlaz/select/ et testé cette commande ci mais elle ne fonctionne pas non plus :
SELECT dbo_Materiel.IdObjet, CASE dbo_Materiel.TechRubrique WHEN '172' THEN dbo_TechDonnees.IdObjet LIKE null END as dbo_TechDonnees.IdObjet
FROM dbo_Materiel
WHERE dbo_Materiel.TechRubrique Like '172'  
OR dbo_Materiel.TechRubrique Like '121'  
GROUP BY dbo_Materiel.IdObjet, dbo_Materiel.Valeur;
 
Des solutions?

n°2065736
hardsessio​n
Certifié Breton
Posté le 24-03-2011 à 09:52:48  profilanswer
 

Au fait, erreur rencontrée avec les deux commandes :  opérateur absent sur l'expression CASE WHEN...

n°2066105
hardsessio​n
Certifié Breton
Posté le 25-03-2011 à 15:40:55  profilanswer
 

personne?

n°2072368
hardsessio​n
Certifié Breton
Posté le 28-04-2011 à 15:14:40  profilanswer
 

Toujours personne?

mood
Publicité
Posté le 28-04-2011 à 15:14:40  profilanswer
 

n°2072397
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 28-04-2011 à 17:24:07  profilanswer
 

1/ C'est DISTINCT et pas DISTINCT ON (je sais pas où tu es allé chercher le ON...)
2/ CASE WHEN n'existe pas sous Access


---------------
J'ai un string dans l'array (Paris Hilton)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Clause Distinct sous Access

 

Sujets relatifs
[Résolu] Problème clause is ambiguous[aide] ACCESS, création tables (appliquée pour une gestion budget)
Random Access File petit problemeRequête Access : plus gros montants et "Autres"
Cherchez l'erreur : access check failed.RESOLU [Access 2003] Requête jointure et union
probleme avec un distinct[VBA Access]Changer taille et caractère dans un état
[ACCESS] Problème jointure entre requêtes[ACCESS 2007] faire un formulaire sur 3 tables
Plus de sujets relatifs à : Clause Distinct sous Access


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR