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

WinDev Discussion :

ORDER BY dans sous-requête


Sujet :

WinDev

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 12
    Points : 9
    Points
    9
    Par défaut ORDER BY dans sous-requête
    Bonjour,

    J'ai un petit soucis dans une requête que j'ai tapé moi même. Je ne suis peut-être pas dans la bonne rubrique du forum, mais sachant que Windev connait (il me semble) quelques limites niveau SQL, je préfère décrire mon problème ici.

    J'ai une table CADuMois (Chiffre d'affaire du mois), dans laquelle sont enregistrés des chiffres d'affaires.
    Un chiffre d'affaire concerne un Contact, ces deux tables sont liées.
    Un Contact est géré par un Collaborateur, ces deux tables sont liées.

    Pour faire des statistiques, j'ai eu à faire une requête, sortant le top 10 des meilleurs Contacts (selon leur chiffre d'affaire du mois). Cette requête fonctionne bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    SELECT TOP 10 
    	CADuMois.CA_montant AS CA_montant,	
    	Contacts.con_code AS con_code,	
    	Contacts.con_raison_sociale AS con_raison_sociale,	
    	Contacts.con_tel_fact AS con_tel_fact,	
    	Contacts.ID_contacts AS ID_contacts
    FROM 
    	Contacts,	
    	CADuMois
    WHERE 
    	Contacts.ID_contacts = CADuMois.ID_contacts
    	AND
    	(
    		Contacts.ID_Collaborateur = {id_collabo}
    		AND	CADuMois.CA_mois = {combo_mois}
    		AND	CADuMois.CA_annee = {sai_annee}
    	)
    ORDER BY 
    	CA_montant DESC
    On m'a ensuite demandé de faire une autre statistique. Je dois sortir la somme des chiffres d'affaire du mois des Contacts hors du top 10. J'ai d'abord essayé d'isoler ces Contacts, en sortant les ID_Contacts n'étant pas dans les ID du top 10. J'utilise un "NOT IN", mais une erreur SQL s'affiche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    SELECT CADuMois.ID_contacts, CADuMois.CA_montant
     
    FROM CADuMois, Contacts
     
    WHERE 
    CADuMois.CA_mois = {le_mois}
    AND	CADuMois.CA_annee = {l_annee}
    AND	Contacts.ID_Collaborateur = {id_collabo}
     
    AND CADuMois.ID_contacts NOT IN 
    (
    	SELECT TOP 10 
    		CADuMois.ID_contacts
    	FROM 
    		Contacts,	
    		CADuMois
    	WHERE 
    		CADuMois.ID_contacts = Contacts.ID_contacts
    		AND
    		(
    			CADuMois.CA_mois = {le_mois}
    			AND	CADuMois.CA_annee = {l_annee}
    			AND	Contacts.ID_Collaborateur = {id_collabo}
    		)
    	ORDER BY 
    		CADuMois.CA_montant DESC
    )
    L'erreur: "Warning : Mot ORDER inattendu"

    Je ne peux pas me passer de ce classement, puisque c'est lui qui détermine les 10 meilleurs Contacts ...

    Je pense que mon problème serait résolu si j'avais rusé en programmation, mais je devine que ce que je souhaite faire est possible directement en SQL ! Je ne sais simplement pas comment m'y prendre.

    Quelqu'un aurait-il une piste à me donner ?

    Cordialement,

    Ludovic Marquet

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Le NOT IN n'est jamais recommandable.... enfin c'est toujours ce que j'ai entendu dire... dans certains SGBD (notamment Oracle je crois) ça ne fonctionne pas bien.
    Il vaut mieux faire une jointure externe et un WHERE *** IS NULL... et dans ton cas ça te permettra d'utiliser un order by...


    un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    SELECT CADuMois.ID_contacts, CADuMois.CA_montant
     
    FROM CADuMois INNER JOIN Contacts <elle est ou la jointure ???? tu fais un produit cartésien là !>
    LEFT JOIN (
    	SELECT TOP 10 
    		CADuMois.ID_contacts
    	FROM 
    		Contacts,	
    		CADuMois
    	WHERE 
    		CADuMois.ID_contacts = Contacts.ID_contacts
    		AND
    		(
    			CADuMois.CA_mois = {le_mois}
    			AND	CADuMois.CA_annee = {l_annee}
    			AND	Contacts.ID_Collaborateur = {id_collabo}
    		)
    	ORDER BY 
    		CADuMois.CA_montant DESC
    ) myTableTemp on CADuMois.ID_contacts=myTableTemp.ID_Contacts
    WHERE 
    CADuMois.CA_mois = {le_mois}
    AND	CADuMois.CA_annee = {l_annee}
    AND	Contacts.ID_Collaborateur = {id_collabo}
     
    AND myTableTemp .ID_contacts IS NULL
    à tester....
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

Discussions similaires

  1. [proc stock] variable dans sous requête
    Par julien.63 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 22/10/2008, 08h48
  2. Clause ORDER BY dans une requête imbriquée
    Par As2piK dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/02/2008, 09h35
  3. colonne non repérée dans sous-requête
    Par ctobini dans le forum Requêtes
    Réponses: 4
    Dernier message: 29/11/2007, 10h25
  4. problème d'alias dans sous requête
    Par jadey dans le forum SQL
    Réponses: 4
    Dernier message: 05/06/2007, 11h58
  5. Problème de Order by dans une requête
    Par showa dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/08/2004, 15h40

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