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

Oracle Discussion :

Comparer


Sujet :

Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 409
    Points : 40
    Points
    40
    Par défaut Comparer
    Bonjour à toutes, bonjour à tous,

    je voudrais savoir comment comparer le résultat d'une colonne et afficher un message si les valeurs sont différentes
    exemple :
    voici la requête, ici je veux comparer le résultat du COUNT, si je trouve une valeur différente (99 dans ce cas), j'affiche un message.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     SELECT CODE, count(*) into NBR
        FROM MA TABLE
        WHERE CONDITION
        GROUP BY CODE ;
    ---------|-----------|
        |CODE-|-COUNT-|
        ---------|-----------|
        201 131
        202 131
        203 131
        204 131
        205 131
        206 131
        207 131
        208 131
        209 131
        210 131
        211 99
        311 131
        313 131
        ---------|-----------|
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Ajoutez simplement une condition HAVING après le groupage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       SELECT 'attention, pour cette valeur de code : '!!CODE
            , 'il y a ' !! digits(count(*)) !! ' lignes'
       FROM  MA_TABLE 
       WHERE CONDITION
       GROUP BY CODE 
       having count(*) <> 99
       ;

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Si je comprends bien ton besoin : dans ta table, tous les codes devraient être présents le même nombre de fois.
    Tu souhaites identifier les codes dont le nombre de lignes n'est pas égal à la majorité des nombres de lignes des autres codes.

    Ceci posé, le problème semble assez simple à décomposer :
    Compter pour chaque code le nombre de lignes dans lequel il revient (ce que fait la requête qu tu porésentes)
    Compter combien de fois chaque {nombre de lignes} revient pour identifier celui qui revient le plus souvent (la majorité).
    Ne conserver que les codes dont le {nombre de lignes} n'est pas égal à {la majorité}.

    Est-ce clair ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 409
    Points : 40
    Points
    40
    Par défaut NON
    Mais le 99 variable du jour à lendemain, chaque jour une nouvelle valeur dans count(*)
    merci quand même

    Citation Envoyé par escartefigue Voir le message
    Ajoutez simplement une condition HAVING après le groupage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       SELECT 'attention, pour cette valeur de code : '!!CODE
            , 'il y a ' !! digits(count(*)) !! ' lignes'
       FROM  MA_TABLE 
       WHERE CONDITION
       GROUP BY CODE 
       having count(*) <> 99
       ;

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 409
    Points : 40
    Points
    40
    Par défaut pouvez vous mieux détaillé
    Oui mais comment faire? j'ai essayé avec curseur ça n'a pas marché, avec vecteur non plus !!

    Citation Envoyé par al1_24 Voir le message
    Si je comprends bien ton besoin : dans ta table, tous les codes devraient être présents le même nombre de fois.
    Tu souhaites identifier les codes dont le nombre de lignes n'est pas égal à la majorité des nombres de lignes des autres codes.

    Ceci posé, le problème semble assez simple à décomposer :
    Compter pour chaque code le nombre de lignes dans lequel il revient (ce que fait la requête qu tu porésentes)
    Compter combien de fois chaque {nombre de lignes} revient pour identifier celui qui revient le plus souvent (la majorité).
    Ne conserver que les codes dont le {nombre de lignes} n'est pas égal à {la majorité}.

    Est-ce clair ?

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 409
    Points : 40
    Points
    40
    Par défaut Explication
    l'idée n'apparait pas trop claire, comment modéliser ça :

    Compter pour chaque code le nombre de lignes dans lequel il revient (ce que fait la requête qu tu porésentes)
    Compter combien de fois chaque {nombre de lignes} revient pour identifier celui qui revient le plus souvent (la majorité).


    Citation Envoyé par al1_24 Voir le message
    Si je comprends bien ton besoin : dans ta table, tous les codes devraient être présents le même nombre de fois.
    Tu souhaites identifier les codes dont le nombre de lignes n'est pas égal à la majorité des nombres de lignes des autres codes.

    Ceci posé, le problème semble assez simple à décomposer :
    Compter pour chaque code le nombre de lignes dans lequel il revient (ce que fait la requête qu tu porésentes)
    Compter combien de fois chaque {nombre de lignes} revient pour identifier celui qui revient le plus souvent (la majorité).
    Ne conserver que les codes dont le {nombre de lignes} n'est pas égal à {la majorité}.

    Est-ce clair ?

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Peut être ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  DENSE_RANK()                                  
               OVER (ORDER BY COUNT(*) DESC) AS RANG      
          , CODE                                          
          , COUNT(*) AS CNT                               
    FROM MATABLE
    GROUP BY CODE

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 409
    Points : 40
    Points
    40
    Par défaut REMERCIEMENTS
    MERCI BEAUCOUP !!

    Citation Envoyé par escartefigue Voir le message
    Peut être ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  DENSE_RANK()                                  
               OVER (ORDER BY COUNT(*) DESC) AS RANG      
          , CODE                                          
          , COUNT(*) AS CNT                               
    FROM MATABLE
    GROUP BY CODE

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 409
    Points : 40
    Points
    40
    Par défaut plus de détail
    mais comment afficher un message du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dbms.output.put_line (' ERREUR IL Y A DES VALEURS NON IDENTiQUES')

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Ça c'est tout simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT  1
    FROM    (   SELECT  code
                    ,   COUNT(*) AS nbr
                FROM    matable 
                WHERE   condition
                GROUP BY code
            )   src
    HAVING COUNT(DISTINCT nbr) <> 1
    ;
    Si la requête retourne une ligne, tu affiches ton message d'erreur...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

Discussions similaires

  1. [AC-2007] Comment comparer la valeur d'une case à cocher?
    Par glooping dans le forum VBA Access
    Réponses: 9
    Dernier message: 25/08/2009, 09h31
  2. Réponses: 3
    Dernier message: 19/03/2009, 15h49
  3. Comparer les valeurs d'une requête
    Par Friedrick dans le forum Langage SQL
    Réponses: 1
    Dernier message: 22/02/2008, 01h10
  4. [WSS3] Valeurs d'une colone "multivalue"
    Par vds2302 dans le forum SharePoint
    Réponses: 0
    Dernier message: 26/11/2007, 11h46
  5. Réponses: 2
    Dernier message: 10/06/2007, 22h24

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