IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

La clause ORDER BY est en conflit avec le DISTINCT


Sujet :

Langage SQL

  1. #1
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut La clause ORDER BY est en conflit avec le DISTINCT
    Bonjour tout le monde.

    Ce message s'affiche quand je lance mon formulaire Access.
    C'est la requête SQL qui est en source d'une de mes zones de liste qui en est la cause :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT DISTINCT N.NumNote AS N°Note, N.DateNote, C.NumContrat AS N°Cont, Cl.NumCli AS N°Cli, Cl.NomCli AS NomClient, C.DateEffetContrat AS DateEffet, C.NatureContrat AS Nature, V.NomVendeur, S.NumEmploye, S.PrenomEmploye AS Redacteur, A.NumAgence, A.NomAgence, V.NumVendeur 
    FROM NOTES AS N, CONTRAT AS C, CLIENT AS Cl, AGENCE AS A, VENDEUR AS V, SERV_ASSU AS S, Avoir AS Av 
    WHERE C.NumContrat=N.NumContrat 
    And C.NumCli=Cl.NumCli 
    And C.NumAgence=A.NumAgence 
    And C.NumVendeur=V.NumVendeur 
    And N.NumEmploye=S.NumEmploye 
    And N.NumNote=Av.NumNote 
    And N.CatNote=1 
    ORDER BY N.ValidNote, N.DateNote;
    Alors le souci, c'est que j'ai besoin des deux (enfin je crois), donc je ne sais pas trop comment remédier à ce problème

    Voici un screenshot de mes relations :


    Merci d'avance à ceux qui me liront

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 392
    Points
    28 392
    Par défaut
    As-tu essayé de reformuler ta requête avec des jointures normalisées ?

  3. #3
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Tu demandes distinct champA et tu veux l'ordonner par champB.
    Pour toi, ça veut dire quoi ?

    Petit exemple
    champA champB
    A 1
    A 2
    B 3
    B 5

    SELECT DISTINCT donne : A et B, mais comment les trier par champB ?

    => Il faut que tu retires ValidNote de ton ORDER BY...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 63
    Points : 54
    Points
    54
    Par défaut
    Je ne connais pas trop Access, mais est ce que cela ne viendrait pas du fait que le champ N.ValidNote n'est pas sélectionné ?

    - Soit essayez le de supprimer dans la clause Order by et retester,
    - Soit l'ajouter dans la liste des champs sélectionnés et retester.

  5. #5
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Tout d'abord merci de vos réponses rapides.
    Le problème c'est que j'ai besoin que mes notes soient ordonnées d'abord en fonction de ValidNote (qui est un booléen) de manière à ce que les notes qui ont ValidNote à Faux soient positionnées en haut et ensuite par ordre croissant de date de création de la note.
    Or j'ai aussi envie qu'il n'y ait pas de doublons dans ma zone de liste, d'où le dilemme

  6. #6
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Citation Envoyé par Creenshaw Voir le message
    - Soit l'ajouter dans la liste des champs sélectionnés et retester.
    Citation Envoyé par moi;
    Tu demandes distinct champA et tu veux l'ordonner par champB.
    Pour toi, ça veut dire quoi ?
    Si tu veux trier par ValidNote, ça veut dire qu'il n'y a qu'un seul ValidNote par "groupe" défini par ton distinct. Sinon, ça n'a pas de sens.
    Dans ce cas, pourquoi ne pas l'ajouter dans le SELECT ?

  7. #7
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Je l'ai ajouté, mais ça ne fait pas ce que je voudrais : les notes sont bien triées par date croissante, mais les notes non validées devraient être positionnées en haut
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT N.NumNote AS N°Note, N.DateNote, C.NumContrat AS N°Cont, Cl.NumCli AS N°Cli, Cl.NomCli AS NomClient, C.DateEffetContrat AS DateEffet, C.NatureContrat AS Nature, V.NomVendeur, S.NumEmploye, S.PrenomEmploye AS Redacteur, A.NumAgence, A.NomAgence, V.NumVendeur 
    FROM NOTES AS N, CONTRAT AS C, CLIENT AS Cl, AGENCE AS A, VENDEUR AS V, SERV_ASSU AS S, Avoir AS Av 
    WHERE C.NumContrat=N.NumContrat And C.NumCli=Cl.NumCli And C.NumAgence=A.NumAgence And C.NumVendeur=V.NumVendeur And N.NumEmploye=S.NumEmploye And N.NumNote=Av.NumNote And N.CatNote=1 
    ORDER BY N.DateNote;

  8. #8
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    C'est bon j'ai trouvé, c'était juste que j'avais oublié de mettre DESC pour ValidNote
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT N.NumNote AS N°Note, N.DateNote, C.NumContrat AS N°Cont, Cl.NumCli AS N°Cli, Cl.NomCli AS NomClient, C.DateEffetContrat AS DateEffet, C.NatureContrat AS Nature, V.NomVendeur, S.NumEmploye, S.PrenomEmploye AS Redacteur, A.NumAgence, A.NomAgence, V.NumVendeur, N.ValidNote
    FROM NOTES AS N, CONTRAT AS C, CLIENT AS Cl, AGENCE AS A, VENDEUR AS V, SERV_ASSU AS S, Avoir AS Av
    WHERE C.NumContrat=N.NumContrat And C.NumCli=Cl.NumCli And C.NumAgence=A.NumAgence And C.NumVendeur=V.NumVendeur And N.NumEmploye=S.NumEmploye And N.NumNote=Av.NumNote And N.CatNote=1
    ORDER BY N.ValidNote DESC , N.DateNote;
    Merci à tous pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Clause order by avec l'ordre d'insertion des données
    Par renaud26 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/01/2011, 11h51
  2. Clause Ordy en conflit avec Distinct
    Par jmde dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 15/02/2010, 11h28
  3. Réponses: 2
    Dernier message: 31/07/2007, 15h53
  4. Pb avec la clause ORDER BY...
    Par Karibou dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 16/08/2005, 14h48
  5. Réponses: 10
    Dernier message: 30/11/2004, 10h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo