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 :

Retour conditionnel d'une colonne


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 19
    Points : 10
    Points
    10
    Par défaut Retour conditionnel d'une colonne
    Bonjour,

    ci-apres le sql
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    SELECT  p.MATRICULE,
                      p.NOM,
                      p.PRENOM,
                      c.DATEJ,
               CASE WHEN TRIM(TO_CHAR(c.DATEJ,'DAY')) = 'MONDAY' 
               THEN CASE      WHEN ((ABS(c.CPT005) - trunc(ABS(c.CPT005)))*60) < 10
                     THEN
                        TRUNC(c.CPT005)||' h 0'||
                        TRUNC(ROUND((c.CPT005 - trunc(c.CPT005))*60))||' min'
                     ELSE
                        TRUNC(c.CPT005)||' '||TRUNC(ROUND((c.CPT005 - TRUNC(c.CPT005))*60))
                              ||' min' 
                     END                                                     
               ELSE 
                     CASE     WHEN ((ABS(c.CPT005 + c.CPT006) - trunc(ABS(c.CPT005 + 
                              c.CPT006)))*60) < 10
                     THEN
                              TRUNC(c.CPT005 + c.CPT006)||' h 0'||TRUNC(ROUND(((c.CPT005 + 
                              c.CPT006) - trunc(c.CPT005 + c.CPT006))*60))||' min'
                     ELSE
                              TRUNC(c.CPT005 + c.CPT006)||' h '||TRUNC(ROUND(((c.CPT005 
                              + c.CPT006) - trunc(c.CPT005 + c.CPT006))*60))||' min'
                     END                                                     
               END    CUMUL_HEBDO_COMPTA,
               CASE WHEN TRIM(TO_CHAR(c.DATEJ,'DAY')) = 'MONDAY' 
                         THEN 
                     CASE     WHEN ((ABS(c.CPT011) - trunc(ABS(c.CPT011)))*60) < 10
                     THEN
                     trunc(c.CPT011)||' h 0'||TRUNC(ROUND((c.CPT011 - trunc(c.CPT011))*60))||' min' 
                     ELSE
                     trunc(c.CPT011)||' h '||TRUNC(ROUND((c.CPT011 - trunc(c.CPT011))*60))||' min' 
                     END
                      ELSE 
                     CASE     WHEN ((ABS(c.CPT011 + c.CPT012) - trunc(ABS(c.CPT011 + c.CPT012)))*60) < 10
                     THEN
                     trunc(c.CPT011 + c.CPT012)||' h 0'||TRUNC(ROUND((c.CPT011 + c.CPT012 - trunc(c.CPT011 + c.CPT012))*60))||' min' 
                     ELSE
                     trunc(c.CPT011 + c.CPT012)||' h '||TRUNC(ROUND((c.CPT011 + c.CPT012 - trunc(c.CPT011 + c.CPT012))*60))||' min' 
                     END
               END    CUMUL_HEBDO_REAL,
               CASE WHEN ((ABS(c.CPT024) - trunc(ABS(c.CPT024)))*60) < 10
                         THEN
                              DECODE(SIGN(c.CPT024),-1,'- '||trunc(ABS(c.CPT024))||' h 0'||TRUNC(ROUND((ABS(c.CPT024) - trunc(ABS(c.CPT024)))*60))||' min',trunc(ABS(c.CPT024))||' h 0'||TRUNC(ROUND((ABS(c.CPT024) - trunc(ABS(c.CPT024)))*60))||' min')
                     ELSE
                     CASE WHEN ROUND((ABS(c.CPT024) - trunc(ABS(c.CPT024)))*60) = 60
                     THEN
                      DECODE(SIGN(c.CPT024),-1,'- '||trunc(ABS(c.CPT024+1))||' h 00 min',trunc(ABS(c.CPT024+1))||' h 00 min')
                     ELSE
                     DECODE(SIGN(c.CPT024),-1,'- '||trunc(ABS(c.CPT024))||' h '||TRUNC(ROUND((ABS(c.CPT024) - trunc(ABS(c.CPT024)))*60))||' min',trunc(ABS(c.CPT024))||' h '||TRUNC(ROUND((ABS(c.CPT024) - trunc(ABS(c.CPT024)))*60))||' min')
                     END
             END      DEBIT_CREDIT_HEBDO,
             CASE WHEN ((ABS(c.CPT026) - trunc(ABS(c.CPT026)))*60) < 10
                         THEN
                              DECODE(SIGN(c.CPT026),-1,'- '||trunc(ABS(c.CPT026))||' h 0'||TRUNC(ROUND((ABS(c.CPT026) - trunc(ABS(c.CPT024)))*60))||' min',trunc(ABS(c.CPT026))||' h 0'||TRUNC(ROUND((ABS(c.CPT026) - trunc(ABS(c.CPT026)))*60))||' min')
                     ELSE
                     CASE WHEN ROUND((ABS(c.CPT026) - trunc(ABS(c.CPT026)))*60) = 60
                     THEN
                      DECODE(SIGN(c.CPT026),-1,'- '||trunc(ABS(c.CPT026+1))||' h 00 min',trunc(ABS(c.CPT026+1))||' h 00 min')
                     ELSE
                     DECODE(SIGN(c.CPT026),-1,'- '||trunc(ABS(c.CPT026))||' h '||TRUNC(ROUND((ABS(c.CPT026) - trunc(ABS(c.CPT026)))*60))||' min',trunc(ABS(c.CPT026))||' h '||TRUNC(ROUND((ABS(c.CPT026) - trunc(ABS(c.CPT026)))*60))||' min')
                     END
             END      DEBIT_CREDIT_MENS
    FROM
             PERSONNEL p,
             COMPTEURJ c
    WHERE
              (1=1)
    AND       c.NUMMAT = p.NUMMAT
    AND       TO_CHAR(c.DATEJ,'YYYYMMDD') = TO_CHAR(SYSDATE,'YYYYMMDD')
    AND       (p.MATRICULE = '00763429' )
    ORDER BY p.MATRICULE, c.DATEJ
    Je souhaite ne faire apparaitre que le debit_credit_mens ou debit_credit_hebdo
    en fonction de la valeur de la colonne p.cycle
    Est-il possible de ne selectionner que 7 sur 8 colonnes
    J'ai essayé sans succès
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    SELECT  p.MATRICULE,
                      p.NOM,
                      p.PRENOM,
                      c.DATEJ,
               CASE WHEN TRIM(TO_CHAR(c.DATEJ,'DAY')) = 'MONDAY' 
               THEN CASE      WHEN ((ABS(c.CPT005) - trunc(ABS(c.CPT005)))*60) < 10
                     THEN
                        TRUNC(c.CPT005)||' h 0'||
                        TRUNC(ROUND((c.CPT005 - trunc(c.CPT005))*60))||' min'
                     ELSE
                        TRUNC(c.CPT005)||' '||TRUNC(ROUND((c.CPT005 - TRUNC(c.CPT005))*60))
                              ||' min' 
                     END                                                     
               ELSE 
                     CASE     WHEN ((ABS(c.CPT005 + c.CPT006) - trunc(ABS(c.CPT005 + 
                              c.CPT006)))*60) < 10
                     THEN
                              TRUNC(c.CPT005 + c.CPT006)||' h 0'||TRUNC(ROUND(((c.CPT005 + 
                              c.CPT006) - trunc(c.CPT005 + c.CPT006))*60))||' min'
                     ELSE
                              TRUNC(c.CPT005 + c.CPT006)||' h '||TRUNC(ROUND(((c.CPT005 
                              + c.CPT006) - trunc(c.CPT005 + c.CPT006))*60))||' min'
                     END                                                     
               END    CUMUL_HEBDO_COMPTA,
               CASE WHEN TRIM(TO_CHAR(c.DATEJ,'DAY')) = 'MONDAY' 
                         THEN 
                     CASE     WHEN ((ABS(c.CPT011) - trunc(ABS(c.CPT011)))*60) < 10
                     THEN
                     trunc(c.CPT011)||' h 0'||TRUNC(ROUND((c.CPT011 - trunc(c.CPT011))*60))||' min' 
                     ELSE
                     trunc(c.CPT011)||' h '||TRUNC(ROUND((c.CPT011 - trunc(c.CPT011))*60))||' min' 
                     END
                      ELSE 
                     CASE     WHEN ((ABS(c.CPT011 + c.CPT012) - trunc(ABS(c.CPT011 + c.CPT012)))*60) < 10
                     THEN
                     trunc(c.CPT011 + c.CPT012)||' h 0'||TRUNC(ROUND((c.CPT011 + c.CPT012 - trunc(c.CPT011 + c.CPT012))*60))||' min' 
                     ELSE
                     trunc(c.CPT011 + c.CPT012)||' h '||TRUNC(ROUND((c.CPT011 + c.CPT012 - trunc(c.CPT011 + c.CPT012))*60))||' min' 
                     END
               END    CUMUL_HEBDO_REAL,
    
               if p.cycle like '%TPLEIN%' 
    
               then
                        
    CASE WHEN ((ABS(c.CPT024) - trunc(ABS(c.CPT024)))*60) < 10
                         THEN          
                    DECODE(SIGN(c.CPT024),-1,'- '||trunc(ABS(c.CPT024))||' h 0'||TRUNC(ROUND((ABS(c.CPT024) - trunc(ABS(c.CPT024)))*60))||' min',trunc(ABS(c.CPT024))||' h 0'||TRUNC(ROUND((ABS(c.CPT024) - trunc(ABS(c.CPT024)))*60))||' min')
                     ELSE
                     CASE WHEN ROUND((ABS(c.CPT024) - trunc(ABS(c.CPT024)))*60) = 60
                     THEN
                      DECODE(SIGN(c.CPT024),-1,'- '||trunc(ABS(c.CPT024+1))||' h 00 min',trunc(ABS(c.CPT024+1))||' h 00 min')
                     ELSE
                     DECODE(SIGN(c.CPT024),-1,'- '||trunc(ABS(c.CPT024))||' h '||TRUNC(ROUND((ABS(c.CPT024) - trunc(ABS(c.CPT024)))*60))||' min',trunc(ABS(c.CPT024))||' h '||TRUNC(ROUND((ABS(c.CPT024) - trunc(ABS(c.CPT024)))*60))||' min')
                     END
                   END      DEBIT_CREDIT_HEBDO
    
            Else   
    
          	CASE WHEN ((ABS(c.CPT026) - trunc(ABS(c.CPT026)))*60) < 10
                         THEN
                              DECODE(SIGN(c.CPT026),-1,'- '||trunc(ABS(c.CPT026))||' h 0'||TRUNC(ROUND((ABS(c.CPT026) - trunc(ABS(c.CPT024)))*60))||' min',trunc(ABS(c.CPT026))||' h 0'||TRUNC(ROUND((ABS(c.CPT026) - trunc(ABS(c.CPT026)))*60))||' min')
                     ELSE
                     CASE WHEN ROUND((ABS(c.CPT026) - trunc(ABS(c.CPT026)))*60) = 60
                     THEN
                      DECODE(SIGN(c.CPT026),-1,'- '||trunc(ABS(c.CPT026+1))||' h 00 min',trunc(ABS(c.CPT026+1))||' h 00 min')
                     ELSE
                     DECODE(SIGN(c.CPT026),-1,'- '||trunc(ABS(c.CPT026))||' h '||TRUNC(ROUND((ABS(c.CPT026) - trunc(ABS(c.CPT026)))*60))||' min',trunc(ABS(c.CPT026))||' h '||TRUNC(ROUND((ABS(c.CPT026) - trunc(ABS(c.CPT026)))*60))||' min')
                     END
             	END      DEBIT_CREDIT_MENS
    
          End if
    
    FROM
             PERSONNEL p,
             COMPTEURJ c
    WHERE
              (1=1)
    AND       c.NUMMAT = p.NUMMAT
    AND       TO_CHAR(c.DATEJ,'YYYYMMDD') = TO_CHAR(SYSDATE,'YYYYMMDD')
    AND       (p.MATRICULE = '00763429' )
    ORDER BY p.MATRICULE, c.DATEJ

    Pourriez-vous m'aider

    Merci d'avance

  2. #2
    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
    Par défaut
    Citation Envoyé par velo83 Voir le message
    ...
    Je souhaite ne faire apparaitre que le debit_credit_mens ou debit_credit_hebdo
    en fonction de la valeur de la colonne p.cycle
    Est-il possible de ne selectionner que 7 sur 8 colonnes
    ...
    En SQL statique non. Mais il est possible d'afficher Null pour la colonne qui ne doit pas apparaitre.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup pour votre réponse

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/01/2012, 13h18
  2. [XL-2007] Créer une colonne à partir d'une selection conditionnelle
    Par sunstrike69 dans le forum Excel
    Réponses: 6
    Dernier message: 27/07/2009, 18h33
  3. Réponses: 4
    Dernier message: 16/08/2007, 23h13
  4. [SQL]Retour d'une colonne unique
    Par Le nain Attila dans le forum Oracle
    Réponses: 4
    Dernier message: 31/03/2006, 16h26

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