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 :

afficher les plus grand montants


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 160
    Points : 61
    Points
    61
    Par défaut afficher les plus grand montants
    Bonjour

    j'ai un problème en sql dont je n'arrive pas à solutionner.

    A la base, j'ai deux tables liées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT DISTINCT CLIENTS.CLINOM1 as CLIENT, Sum(MVTS.MVTDEBIT) - Sum(MVTS.MVTCREDIT) as Somme 
    FROM CLIENTS INNER JOIN MVTS ON CLIENTS.CLICODE = MVTS.MVTCOMPTE WHERE (((MVTS.MVTCLETTR)<>-1)) 
    GROUP BY CLIENTS.CLINOM1 ORDER BY CLIENTS.CLINOM1
    la première indique le nom et la deuxième, grâce à une fonction sum m'indique le total que cette personne me doit

    j'aimerai directement que le code sql me classe cette liste par les plus grands montants (aditionnés, obtenus par le sum) jusqu'au plus petit.

    Est-ce possible directement dans ma requête actuelle ?

    merci

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    As-tu essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...ORDER BY CLIENTS.CLINOM1, Somme DESC
    Au passage, tes parenthèses ne servent à rien (si elles compliquent la lecture à la longue )

  3. #3
    Membre averti

    Inscrit en
    Août 2005
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 220
    Points : 364
    Points
    364
    Par défaut
    As tu essayé de simplement faire ton ORDER BY sur le champ Somme en ajoutant DESC derrière ?

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Un DISTINCT coulpé avec un GROUP BY ne sert pas à grand-chose.

    Il est possible que ORDER BY Somme DESC ne fonctionne pas avec tous les moteurs.

    Certains acceptent ORDER BY 2 DESC (faisant référence à la deuxième colonne comme dans une UNION

    ORDER BY Sum(MVTS.MVTDEBIT) - Sum(MVTS.MVTCREDIT) DESC devrait marcher dans tous les cas.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 160
    Points : 61
    Points
    61
    Par défaut suite
    J'obtiens un message d'erreur me disant que

    'La clause order by est en conflit avec distinct'

    lorsque je fais ORDER BY CLIENTS.CLINOM1, Somme DESC

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 160
    Points : 61
    Points
    61
    Par défaut suite
    Toutes les solutions plantent

    sauf celle là

    order 2 desc mais rien ne change mais cela ne plante pas

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    order 2 desc mais rien ne change mais cela ne plante pas
    tu veux dire que tu n'as pas un tri ascendant sur le nom du client et un tri DESCENDANT sur la somme ?

    Comment sont triées tes données avec cette clause ?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 160
    Points : 61
    Points
    61
    Par défaut suite
    Il trie de manière ascendante les noms mais les montants

    j'aimerai qu'il trie que par montant le plus élevé mais quand je supprime

    CLIENTS.CLINOM1

    pour y mettre seulement

    ORDER BY Somme DESC

    il me dit que la clause order by Somme est en conflit avec distinct

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 160
    Points : 61
    Points
    61
    Par défaut suite
    il est pourtant à false

    c'est bizarre

    au fait : j'ai mis le style xp (composant) sur ma fiche.

  10. #10
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    Normal ! Avec DISTINCT tu regroupes des occurences. Et si elles sont regroupées, ya plus à ordonner, puisqu'il y en a plus qu'une !

    Citation Envoyé par Mediat
    Un DISTINCT coulpé avec un GROUP BY ne sert pas à grand-chose.
    Moi je verrai les choses comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT CLIENTS.CLINOM1 as Cl, Sum(MVTS.MVTDEBIT) - Sum(MVTS.MVTCREDIT) as Som
    FROM CLIENTS INNER JOIN MVTS ON CLIENTS.CLICODE = MVTS.MVTCOMPTE
    WHERE (((MVTS.MVTCLETTR)<>-1))
    GROUP BY Cl
    ORDER BY Som DESC
    ++

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 160
    Points : 61
    Points
    61
    Par défaut suite
    J'ai un message d'erreur ' vous avez essayé d'exécuter une requête ne comprenant pas l'expression spécifiée C1 comme une partie de la fonction d'agrégat'.

    je ne pige pas car j'ai fait pile poil le code que tu m'as donné


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT CLIENTS.CLINOM1 as Cl, Sum(MVTS.MVTDEBIT) - Sum(MVTS.MVTCREDIT) as Som 
    FROM CLIENTS INNER JOIN MVTS ON CLIENTS.CLICODE = MVTS.MVTCOMPTE 
    WHERE (((MVTS.MVTCLETTR)<>-1)) 
    GROUP BY Cl 
    ORDER BY Som DESC

  12. #12
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut Re: suite
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT CLIENTS.CLINOM1 as Cl, Sum(MVTS.MVTDEBIT) - Sum(MVTS.MVTCREDIT) as Som 
    FROM CLIENTS INNER JOIN MVTS ON CLIENTS.CLICODE = MVTS.MVTCOMPTE 
    WHERE (((MVTS.MVTCLETTR)<>-1)) 
    GROUP BY CLIENTS.CLINOM1  
    ORDER BY Som DESC

  13. #13
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    C'était pas C1, mais Cl, pour "Clients". Mais si tu as mis C1 dans le SELECT et dans le GROUP BY, le problème ne vient pas de là.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT CLIENTS.CLINOM1 as Client, Sum(MVTS.MVTDEBIT) - Sum(MVTS.MVTCREDIT) as Som
    FROM CLIENTS INNER JOIN MVTS ON CLIENTS.CLICODE = MVTS.MVTCOMPTE
    WHERE (((MVTS.MVTCLETTR)<>-1))
    GROUP BY Client
    ORDER BY Som DESC

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/03/2015, 20h14
  2. Réponses: 2
    Dernier message: 18/03/2009, 07h48
  3. requête pôur sélectionner les 5 valeurs les plus grandes ?
    Par kikidrome dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/11/2007, 16h29
  4. Réponses: 11
    Dernier message: 22/03/2007, 16h45
  5. Requete récupérer les 3 numéros les plus grands
    Par nerick dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/01/2006, 13h51

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