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 :

Comparer les valeurs dans une colonne


Sujet :

Langage SQL

  1. #1
    Membre actif Avatar de lucienkany
    Profil pro
    Développeur
    Inscrit en
    Janvier 2004
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Janvier 2004
    Messages : 257
    Points : 220
    Points
    220
    Par défaut Comparer les valeurs dans une colonne
    Bonjour tous,

    Voici mon problème qui m'a semblé simple mais je n'ai pas trouvé la solution.

    Dans une table il y a une colonne VALEUR avec des chiffres (FLOAT).

    La première ligne contient une valeur référence.

    Je souhaite selectionner toutes les valeurs inférieures à la valeur de la première ligne.

    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
    VALEUR
    0.0076
    155.241
    178.39
    247.467
    279.131
    193.468
    0.0066
    0.006
    109.17
    191.297
    522.587
    2.60979
    435.133
    0.0056
    Le résultat attendu


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    VALEUR
    0.0066
    0.006
    0.0056
    D'avance merci

  2. #2
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    ,

    J'aurais 2 questions :
    - quelle base de donnée utilises-tu ? Autrement dit, quelles possibilités sont offertes par ton sql ?
    - comment as-tu réfléchi au problème ?

    De prime abord, ça ressemble à un problème nécessitant une sous-requête.

    Code pseudo-sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      soit E l'ensemble des données,
     
      soit S une sous-requête donnant la première ligne de donnée de E,
      sélectionner les lignes dans E à partir de la deuxième ligne pour lesquelles la valeur est inférieure à celle de S

    Comme le détail nécessite de connaître la base, je te laisse compléter .

  3. #3
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 102
    Points
    1 102
    Par défaut
    Bonjour,

    Pour moi, (des experts SQL auront peut être une autre solution) il te faut faire une sous requête qui sélectionne la valeur que tu veux tester (et ne me dis pas que c'est la première ligne il n'y a pas d'ordre dans un SGBD...)

    Ensuite tu fais une requête qui liste les valeurs que tu cherches selon le critère qui t’intéresse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select valeur, <Autrescolonnes> 
         from <tatable> 
         where valeur < 
                      (select valeur 
                              from <tatable> 
                              where <lecriterequivabien>)
    Edit 13:08 Grillé!

    Cordialement

  4. #4
    Membre actif Avatar de lucienkany
    Profil pro
    Développeur
    Inscrit en
    Janvier 2004
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Janvier 2004
    Messages : 257
    Points : 220
    Points
    220
    Par défaut
    Citation Envoyé par Cincinnatus Voir le message
    ,

    J'aurais 2 questions :
    - quelle base de donnée utilises-tu ? Autrement dit, quelles possibilités sont offertes par ton sql ?
    - comment as-tu réfléchi au problème ?
    Je suis sur MS SQL SERVER

  5. #5
    Membre actif Avatar de lucienkany
    Profil pro
    Développeur
    Inscrit en
    Janvier 2004
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Janvier 2004
    Messages : 257
    Points : 220
    Points
    220
    Par défaut
    Citation Envoyé par acaumes Voir le message
    Bonjour,

    Pour moi, (des experts SQL auront peut être une autre solution) il te faut faire une sous requête qui sélectionne la valeur que tu veux tester (et ne me dis pas que c'est la première ligne il n'y a pas d'ordre dans un SGBD...)
    Bonjour,

    Je confirme que c'est la première ligne.
    Les données sont dans une table générée par une fonction, qui regroupe le résultat de deux requêtes avec UNION ALL et la première requête renvoi juste une seule ligne. Donc la valeur test sera toujours sur la première ligne.

    Il me faut donc filtrer le reste en comparant avec cette première valeur.

    Je vais tester ton code.

    Merci pour ton aide.

  6. #6
    Membre actif Avatar de lucienkany
    Profil pro
    Développeur
    Inscrit en
    Janvier 2004
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Janvier 2004
    Messages : 257
    Points : 220
    Points
    220
    Par défaut
    Bonjour acaumes,

    En tenant compte de la position de la valeur dans la première ligne j'ai ajouté top(1) à ton code et j'ai obtenu le résultat attendu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select valeur, <Autrescolonnes> 
         from <tatable> 
         where valeur < 
                      (select top(1) valeur 
                              from <tatable> 
                              where <lecriterequivabien>)
    Merci à vous tous.

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    bonjour,

    Citation Envoyé par lucienkany Voir le message
    Les données sont dans une table générée par une fonction, qui regroupe le résultat de deux requêtes avec UNION ALL et la première requête renvoi juste une seule ligne. Donc la valeur test sera toujours sur la première ligne.
    Non, c'est faux.

    et comme vous avez basé votre requête sur ce postulat, elle est fausse aussi !

    Même si elle semble apporter satisfaction aujourd'hui, ça ne sera pas toujours le cas.

    Vous pouvez modifier votre fonction table pour qu'elle renvoie une colonne supplémentaire indiquant la source (pour filtrer dessus dans votre sous requête), voire reprendre toute la fonction (est-ce une fonction table en ligne ?)

  8. #8
    Membre actif Avatar de lucienkany
    Profil pro
    Développeur
    Inscrit en
    Janvier 2004
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Janvier 2004
    Messages : 257
    Points : 220
    Points
    220
    Par défaut
    Merci,

    Pouvez-vous me proposer quelque chose s'il vous plaît.

    Cordialement.

  9. #9
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 102
    Points
    1 102
    Par défaut
    Je vois deux solutions :
    1/ Ajoute un indicateur dans tes requêtes UNION (par exemple 0 pour ta première requête et 1 pour les autres requêtes et ta sous requête devient where indicateur = 0.

    2/ Enlève ta première requête de ton UNION et utilise la pour donner la valeur à tester

    Cordialement

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/01/2018, 14h06
  2. [XL-2013] Comparer valeur dans une colonne avec les colonnes precedentes
    Par Mimosa777 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/07/2015, 15h44
  3. Copier les valeurs d'une colonne dans une autre
    Par hochimi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/07/2007, 13h14
  4. Réponses: 2
    Dernier message: 10/06/2007, 22h24
  5. intervertir les valeurs dans une colonne d'une table
    Par hammou dans le forum Débuter
    Réponses: 2
    Dernier message: 26/01/2004, 10h15

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