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 :

Ligne à retourner sous conditions [10g]


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2019
    Messages : 177
    Points : 45
    Points
    45
    Par défaut Ligne à retourner sous conditions
    Bonjour,
    Dans le requête ci-dessous je récupère sur une date les matricules dont les motifs sont du type PR et les matricule dont les motifs sont A1, A2, A3.
    Je souhaiterais :
    ==> si un matricule à une ligne du type PR et A1, conserver uniquement la ligne A1
    ==> si un matricule à une ligne du type PR et A2, conserver uniquement la ligne A2
    ==>si un matricule à une ligne du type PR et A3, conserver la ligne du type PR et la ligne A3

    dois-je passer par des case when ?
    Merci pour votre retour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT t1.FAMILLE as FA,t2.DAT as DAT,t2.MATRI AS MATRI,t3.NOM AS NOM,t4.MOTIF AS MOTIF
    FROM t1,t2, t3,t4
    where t1.MOTIF = t4.MOTIF
    AND t2.MATRI = t3.MATRI
    AND t4.MATRI = t2.MATRI
    AND t4.DAT = t2.DAT
    AND (t1.FAMILLE in ('PR') OR  t4.MOTIF in ('A1','A2','A3'))
    AND  t2.DAT = '28/05/2020'

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    Dans le requête ci-dessous je récupère sur une date les matricules dont les motifs sont du type PR et les matricule dont les motifs sont A1, A2, A3.
    Mais ce n'est pas forcément vrai d'après la condition de ta requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND (t1.FAMILLE in ('PR') OR  t4.MOTIF in ('A1','A2','A3'))
    Là tu cherches soit les lignes avec une famille PR, soit les lignes avec un motif A1, A2, A3, mais la famille n'est pas forcément PR alors, si?
    Ton résultat attendu porte uniquement sur la famille PR, si d'autres familles alors on pas de restrictions vis-à-vis du motif?

  3. #3
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2019
    Messages : 177
    Points : 45
    Points
    45
    Par défaut
    Ma requête récupère bien les lignes pour lesquels on trouve un motif de la famille PR et les motifs A1, A2, ou A3.
    Les motifs A1, A2, A3 ne sont pas de la famille PR

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Ok, je comprends mieux. Tu peux essayer une requête de ce 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
    WITH comptages as (
    SELECT t1.FAMILLE as FA,t2.DAT as DAT,t2.MATRI AS MATRI,t3.NOM AS NOM,t4.MOTIF AS MOTIF,
    sum(case when t1.FAMILLE = 'PR' then 1 else 0 end) over (partition by t2.matri) cnt_PR,
    sum(case when t4.MOTIF = 'A1' then 1 else 0 end) over (partition by t2.matri) cnt_A1,
    sum(case when t4.MOTIF = 'A1' then 1 else 0 end) over (partition by t2.matri) cnt_A2,
    sum(case when t4.MOTIF = 'A1' then 1 else 0 end) over (partition by t2.matri) cnt_A3
    FROM t1,t2, t3,t4
    where t1.MOTIF = t4.MOTIF
    AND t2.MATRI = t3.MATRI
    AND t4.MATRI = t2.MATRI
    AND t4.DAT = t2.DAT
    AND (t1.FAMILLE in ('PR') OR  t4.MOTIF in ('A1','A2','A3'))
    AND  t2.DAT = to_date('28/05/2020', 'dd/mm/yyyy')
    )
    SELECT FA,DAT,MATRI,NOM,MOTIF
    FROM comptages
    WHERE (motif = 'A1' and cnt_A1 <> 0)
       OR (motif = 'A2' and cnt_A2 <> 0)
       OR (motif = 'A3' and fa = 'PR' and cnt_A3 <> 0 and cnt_PR <> 0)
       OR (motif not in ('A1', 'A2', 'A3'));

  5. #5
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2019
    Messages : 177
    Points : 45
    Points
    45
    Par défaut
    J'ai écrit la requête comme ci-dessous en remplaçant tous les A1 des sum case par A1, A2 et A3.
    Quand je l'exécute, il me reste les lignes
    ==> avec PR
    ==> PR et A1

    Les lignes avec A2 et A3 ne sont pas présentes.

    Il faudrait que si un matricule n'a que PR, je conserve la ligne.
    Si il a A1 et PR, je supprime PR
    Si il a A2 et PR, je supprime PR,
    Si il a A3 et PR, je conserve PR et A3.
    S'il n'a que A1, A2 ou A3 je conserve A1, A2 ou A3.

    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
    WITH comptages as (
    SELECT t1.FAMILLE as FA,t2.DAT as DAT,t2.MATRI AS MATRI,t3.NOM AS NOM,t4.MOTIF AS MOTIF,
    sum(case when t1.FAMILLE = 'PR' then 1 else 0 end) over (partition by t2.matri) cnt_PR,
    sum(case when t4.MOTIF = 'A1' then 1 else 0 end) over (partition by t2.matri) cnt_A1,
    sum(case when t4.MOTIF = 'A2' then 1 else 0 end) over (partition by t2.matri) cnt_A2,
    sum(case when t4.MOTIF = 'A3' then 1 else 0 end) over (partition by t2.matri) cnt_A3
    FROM t1,t2, t3,t4
    where t1.MOTIF = t4.MOTIF
    AND t2.MATRI = t3.MATRI
    AND t4.MATRI = t2.MATRI
    AND t4.DAT = t2.DAT
    AND (t1.FAMILLE in ('PR') OR  t4.MOTIF in ('A1','A2','A3'))
    AND  t2.DAT = to_date('28/05/2020', 'dd/mm/yyyy')
    )
    SELECT FA,DAT,MATRI,NOM,MOTIF
    FROM comptages
    WHERE (motif = 'A1' and cnt_A1 <> 0)
       OR (motif = 'A2' and cnt_A2 <> 0)
       OR (motif = 'A3' and fa = 'PR' and cnt_A3 <> 0 and cnt_PR <> 0)
       OR (motif not in ('A1', 'A2', 'A3'));

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bien vu pour les sum, c'était en effet une erreur de copié-collé. Les conditions étaient aussi mauvaises. Je pense que cette requête devrait mieux fonctionner:
    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
     
    WITH comptages as (
    SELECT t1.FAMILLE as FA,t2.DAT as DAT,t2.MATRI AS MATRI,t3.NOM AS NOM,t4.MOTIF AS MOTIF,
    sum(case when t1.FAMILLE = 'PR' then 1 else 0 end) over (partition by t2.matri) cnt_PR,
    sum(case when t4.MOTIF = 'A1' then 1 else 0 end) over (partition by t2.matri) cnt_A1,
    sum(case when t4.MOTIF = 'A2' then 1 else 0 end) over (partition by t2.matri) cnt_A2
    FROM t1,t2, t3,t4
    where t1.MOTIF = t4.MOTIF
    AND t2.MATRI = t3.MATRI
    AND t4.MATRI = t2.MATRI
    AND t4.DAT = t2.DAT
    AND (t1.FAMILLE in ('PR') OR  t4.MOTIF in ('A1','A2','A3'))
    AND  t2.DAT = to_date('28/05/2020', 'dd/mm/yyyy')
    )
    SELECT FA,DAT,MATRI,NOM,MOTIF
    FROM comptages
    WHERE  (fa = 'PR' and cnt_A1 + cnt_A2 = 0)  OR (motif in ('A1', 'A2', 'A3'))

  7. #7
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2019
    Messages : 177
    Points : 45
    Points
    45
    Par défaut
    Impeccable, je connaissais pas la méthode avec WITH.
    encore une petite chose, est-il possible de dire si tu trouves PR tu ajoutes 4 colonnes H1, H2,H3,H4 qui valent respectivement 9, 11.30,14,16.30,
    si tu trouves AST tu ajoutes H1, H2 qui valent 8 et 32, H3 et H4 sont null
    Si tu trouves ASTJ tu ajoutes H1 et H2 qui valent 8 et 20 et H3, H4 valent null
    Si tu trouves ASTN tu ajoutes H1 et H2 qui valent 20 et 32, H3 et H4 sont null.
    Merci

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Oui, je suppose que c'est le code de la famille:

    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
    28
    29
    30
    31
    32
    33
    WITH comptages as (
    SELECT t1.FAMILLE as FA,t2.DAT as DAT,t2.MATRI AS MATRI,t3.NOM AS NOM,t4.MOTIF AS MOTIF,
    sum(case when t1.FAMILLE = 'PR' then 1 else 0 end) over (partition by t2.matri) cnt_PR,
    sum(case when t4.MOTIF = 'A1' then 1 else 0 end) over (partition by t2.matri) cnt_A1,
    sum(case when t4.MOTIF = 'A2' then 1 else 0 end) over (partition by t2.matri) cnt_A2,
    sum(case when t4.MOTIF = 'A3' then 1 else 0 end) over (partition by t2.matri) cnt_A3
    FROM t1,t2, t3,t4
    where t1.MOTIF = t4.MOTIF
    AND t2.MATRI = t3.MATRI
    AND t4.MATRI = t2.MATRI
    AND t4.DAT = t2.DAT
    AND (t1.FAMILLE in ('PR') OR  t4.MOTIF in ('A1','A2','A3'))
    AND  t2.DAT = to_date('28/05/2020', 'dd/mm/yyyy')
    )
    SELECT FA,DAT,MATRI,NOM,MOTIF, 
    case fa when 'PR'   then '9'
            when 'AST'  then '8'
            when 'ASTJ' then '8'
            when 'ASTN' then '20'
    end h1,
    case fa when 'PR'   then '11.30'
            when 'AST'  then '32'
            when 'ASTJ' then '20'
            when 'ASTN' then '32'
    end h2,
    case fa when 'PR'   then '14'
            else null
    end h3,
    case fa when 'PR'   then '16.30'
            else null
    end h4
    FROM comptages
    WHERE  (fa = 'PR' and cnt_A1 + cnt_A2 = 0)  OR (motif in ('A1', 'A2', 'A3'))

  9. #9
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2019
    Messages : 177
    Points : 45
    Points
    45
    Par défaut
    J'ai essayé les heures se mettent bien pour les types PR, mais pas pour les AST, ASTJ, ASTN

  10. #10
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2019
    Messages : 177
    Points : 45
    Points
    45
    Par défaut
    Je crois que c'est normal car les AST, ASTJ et ASTN sont des motifs et pas de FA.

  11. #11
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2019
    Messages : 177
    Points : 45
    Points
    45
    Par défaut
    J'ai trouvé
    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
    case  when FA='PR'   then '9'
     
          when MOTIF='AST'  then '8'
            when MOTIF='ASTJ' then '8'
            when MOTIF='ASTN' then '20'
    end HDEB1,
    case  when FA ='PR'   then '11.30' 
             when MOTIF='AST'  then '32'
            when MOTIF='ASTJ' then '20'
            when MOTIF='ASTN' then '32' 
    end HFIN1,
    case FA when 'PR'   then '14'
            else null
    end HDEB2,
    case FA when 'PR'   then '16.30'
            else null
    end HFIN2

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

Discussions similaires

  1. Colorer une plage de lignes excels sous condition
    Par All_yson dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/06/2014, 12h33
  2. Effacer une ligne sélectionnée sous condition
    Par Liloo14 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/04/2013, 00h55
  3. [XL-2003] Suppression de ligne(s) sous condition dans un tableau
    Par jorisfavre dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/02/2013, 16h51
  4. Suppression lignes tableaux sous condition
    Par ES718 dans le forum VBA Word
    Réponses: 2
    Dernier message: 17/07/2012, 09h07
  5. enregistrer lignes fichier sous condition
    Par makohsarah dans le forum Langage
    Réponses: 1
    Dernier message: 21/08/2006, 15h46

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