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

SQL Oracle Discussion :

Afficher si 3 valeurs


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 173
    Points : 485
    Points
    485
    Par défaut Afficher si 3 valeurs
    Bonjour,

    J'ai un souci je n'arrive pas à trouver une solution pour la requête que je désire faire, j'ai des données de ce type :

    id de la personne | code justificatif
    
               1           |          2
               1           |          3
               1           |          4
    Et je voudrais que pour chaque personne dans ma base si elle a bien les 3 justificatifs on affiche 1 et sinon on affiche 0 , je me suis penché sur les CASE WHEN mais je ne trouve pas LA solution.


    Cordialement ,

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Ca donnerait un truc comme ceci :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT PersonId,
      CASE
        WHEN (COUNT(JustificatifId) = 3) THEN 1
        ELSE 0
      END HasJustificatifs
    FROM Table
    GROUP BY PersonId;
    Dans ce cas, on ne vérifie pas les Id des justificatifs, on ne fait que compter. Donc si la personne a plusieurs fois le même document, et que la valeur de COUNT(JustificatifId) est égale à 3, alors on affichera 1 sur la ligne...

    Faut-il tenir compte des Id ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 173
    Points : 485
    Points
    485
    Par défaut
    Le problème c'est que la personne peut avoir 6 id dont seulement 3 obligatoire et il faut que je vérifie les obligatoires.

    Et pour ce qui est de la requête que tu me proposes il me renvoie une erreur du style:
    n'est pas une expression GROUP BY
    .

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Ok pour tenir compte des IDs, tu peux rajouter une clause WHERE (entre la clause FROM et la clause GROUP BY) :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE DocumentId IN (2, 3, 4)
    Ici j'ai supposé que 2, 3 et 4 sont les IDs des documents que l'utilisateur doit avoir.

    Pour ton problème avec le GROUP BY, peux-tu poster ta requête ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 173
    Points : 485
    Points
    485
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT
      num_personne,
      CASE
        WHEN idJustif = 'JD' AND idJustif = 'JR' AND idJustif  = 'ID' THEN 1
        ELSE 0
      END HasJustificatifs
    FROM
    matable
    WHERE
    date BETWEEN  '19-03-2013 00:00:00' AND '19-04-2013 00:00:00'
    GROUP BY  num_personne
    Je pense qu'avec le WHERE IN ça doit fonctionner je vérifie les résultats et je te dis.

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252

  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,

    idJustif ne peut pas à la fois être égal à 'JD' et être égal à 'JR' et être égal à 'ID'...


    essayez ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT
      num_personne,
      CASE
        WHEN COUNT(DISTINCT CASE WHEN idJustif IN('JD' ,'JR','ID') THEN idjustif END) = 3 THEN 1
        ELSE 0
      END HasJustificatifs
    FROM
    matable
    WHERE
    date BETWEEN  '19-03-2013 00:00:00' AND '19-04-2013 00:00:00'
    GROUP BY  num_personne

  8. #8
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 173
    Points : 485
    Points
    485
    Par défaut
    Alors j'ai testé votre requête et elle fonctionne parfaitement

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 30/03/2007, 13h16
  2. Réponses: 1
    Dernier message: 28/11/2006, 07h23
  3. Réponses: 3
    Dernier message: 06/07/2006, 19h21
  4. Réponses: 2
    Dernier message: 23/11/2003, 18h44

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