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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2019
    Messages : 179
    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 Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    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 175
    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 confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2019
    Messages : 179
    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 Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    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 175
    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 confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2019
    Messages : 179
    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 Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    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 175
    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'))

+ 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