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

PL/SQL Oracle Discussion :

Diviser avec des variables


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur Industriel
    Inscrit en
    Mars 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Industriel
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2017
    Messages : 14
    Par défaut Diviser avec des variables
    Bonjour,

    Je souhaite faire un indicateur en PL/SQL contenant une division. La division étant composée de deux éléments, j'ai voulu impliquer des variables. Voici le code que j'ai créé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select (A/B) 
    FROM (select count(VWOWO_CODE) A from VCR_WORK_ORDER where VWOWO_JOB_TYPE = 'MP' 
    union all select count(VWOWO_CODE)B from VCR_WORK_ORDER)
    Malheureusement, ma requête n'est pas reconnu et je ne comprends pas mon erreur, étant débutant, et n'ayant pas trouvé de solution à travers les nombreux sites visités, je m'en remet à vous, en espérant que vous pourrez me donner une réponse satisfaisante !

    Merci d'avance !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2012
    Messages : 127
    Par défaut
    Bonjour,

    Avec vos deux requêtes réunies par UNION ALL, vous n'obtenez pas deux colonnes mais deux lignes. Et seul l'alias de la première est reconnu par la requête principale.

    Essayez plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select (A/B) 
    FROM (select count(case when VWOWO_JOB_TYPE = 'MP' then VWOWO_CODE else null end) A,
                       count(VWOWO_CODE) B
             from VCR_WORK_ORDER)

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur Industriel
    Inscrit en
    Mars 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Industriel
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2017
    Messages : 14
    Par défaut
    Merci beaucoup, ça fonctionne parfaitement

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur Industriel
    Inscrit en
    Mars 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Industriel
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2017
    Messages : 14
    Par défaut
    Re-bonjour,
    En voulant ajouter des filtres, je me suis rendu compte que je n'avais pas tout a fait saisi la nuance. Je ne sais pas si ce code est bon étant donné qu'il fait planter ma base de données. (Elle cherche une erreur sur la requête pendant une durée infinie)

    Je voudrais filtrer mes VWOWO_JOB_TYPE par 'MP' ainsi que par date

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select (A/B)  
     FROM (select count(case when VWOWO_JOB_TYPE = 'MP' and 
      VWOWO_REPORT_DATE > DATETIME(EXTRACT(YEAR from current_timestamp),EXTRACT(MONTH from current_timestamp),01,00,00,01) 
     then VWOWO_CODE else null end) A, 
     
     count(case when  VWOWO_REPORT_DATE > DATETIME(EXTRACT(YEAR from current_timestamp),EXTRACT(MONTH from current_timestamp),01,00,00,01) 
      then VWOWO_CODE else null end) B 
    from VCR_WORK_ORDER , coswin_user , EMPLOYEE)
    J'ai beau chercher et retourner la formule dans tous les sens, rien n'y fait je n'arrive pas à obtenir le résultat escompté... J'ai pourtant le sentiment que ce que j'écris n'est pas faux...

    En espérant que vous pourrez me répondre à nouveau, je vous remercie d'avance !!

    Nico

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur Industriel
    Inscrit en
    Mars 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Industriel
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2017
    Messages : 14
    Par défaut
    Je me répond à moi-même pour les personnes qui auraient le même problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select (A/B)*100  FROM 
    (select count(case when VWOWO_JOB_TYPE = 'MC' then 
    VWOWO_CODE else null end) A,                   
    count(VWOWO_CODE) B from
    VCR_WORK_ORDER where 
    VWOWO_TARGET_DATE >  DATETIME(EXTRACT(YEAR from current_timestamp),01,01,00,00,01))
    Il suffit d'imposer les filtres sur la totalité de l'expression ! Mon indicateur fonctionne enfin !

    Bonne journée

    Nico

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 228
    Par défaut
    Sous oracle, tu peux simplifier cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select       count(case when VWOWO_JOB_TYPE = 'MC' then VWOWO_CODE else null end)  
                /  count(VWOWO_CODE) * 100  as POURCENTAGE 
    from         VCR_WORK_ORDER
    where       VWOWO_TARGET_DATE >  DATETIME(EXTRACT(YEAR from current_timestamp),01,01,00,00,01)

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/11/2005, 12h03
  2. Remplir les cellules Excel avec des variables VB
    Par rupeni dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/11/2005, 09h31
  3. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 13h45
  4. paramétrer ADOConnection avec des variables
    Par ouckileou dans le forum Bases de données
    Réponses: 3
    Dernier message: 23/04/2004, 08h11
  5. UPDATE avec des variables Delphi ...
    Par Kokito dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/03/2004, 22h35

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