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

Langage SQL Discussion :

[Oracle]utilisation d'un CASE


Sujet :

Langage SQL

  1. #1
    Membre du Club Avatar de magic charly
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 67
    Points
    67
    Par défaut [Oracle]utilisation d'un CASE
    Bonjour,

    Je souhaiterais faire une insertion multiple au sein de ma table mais je ne sais si ce que je suis en train d'élaborer est SQL ment correct ou même si cela a des chances d'aboutir

    j'ai 3 tables : VALEUR_MESURE_APPLI, CO_GRP_APPLI, GRP_APPLI

    VALEUR_MESURE_APPLI: IDapplication, VALEUR, PERFORMANCE,DATE

    IDapplication | VALEUR | PERFORMANCE | DATE
    1 | 300 | ...| 25/04/3006
    7 | 10 | ... | 24/04/2006
    11| 7000 | ... |22/04/2006
    1| 250 | ... | 20/04/2006


    CO_GRP_APPLI: IDapplication, IDfamille appli (table pour faire les correspondances entre un groupe d'applications et ses différentes appli)

    IDapplication | IDgrp
    1 | 4 |
    7 | 4 |
    11| 2 |

    GRP_APPLI: IDgrp, nom_grp, seuil_perf

    IDgrp | nom_grp | seuil_perf
    4 | IBM | 500
    2 | MICROSOFT | 200

    L'objectif serai de comparer le champ valeur d'une mesure d'une application avec le seuil qui est associée au groupe d'applications auquel appartient l'application concernée par la mesure et en déduire la valeur a mettre au sein du champ performance de VALEUR_MESURE_APPLI.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    si valeur < seuil  alors performance =100
    si seuil <valeur < 2 *seuil alors performance = 100- 100*(valeur -seuil)/Seuil
    si valeur > 2  * seuil alors performance = 0
    je pensais faire quelquechose de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    UPDATE VALEUR_MESURE_APPLI
     
    SET VALEUR_MESURE_APPLI.PERFORMANCE=(SELECT IDappli, DATE_MES, CASE    WHEN VALEUR_MESURE_APPLI.VALEUR >   2*Seuil THEN 0 
                WHEN VALEUR_MESURE_APPLI.VALEUR >    THEN 
                WHEN Seuil <VALEUR_MESURE_APPLI.VALEUR < 2*Seuil   THEN 100- 100*(valeur -seuil)/Seuil100
     
                       END AS PERFORMANCE,
    FROM VALEUR_MESURE_APPLI, GRP_APPLI
    WHERE (VALEUR_MESURE_APPLI.IDAPPLICATION= CO_GRP_APPLI.IDAPPLICATION AND CO_GRP_APPLI.IDgrp=GRP_APPLI.IDgrp)
    mais franchement je ne sais pas trop ou donner de la tete d'un point de vue syntaxique... peut être devrais je écrire le programme a part dans un autre langage dans ce cas la comment l'insérer dans ma requete ?

    merci bcp a ceux qui prendront la peine de lire ce long post

    Charly

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Peut tu donner tes tables sous forme SQL DDL ? Comme indiqué dans ce post ???
    http://www.developpez.net/forums/showthread.php?t=944

    Cela nous aidera

    Quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UPDATE VALEUR_MESURE_APPLI
    SET PERFORMANCE = CASE
                         WHEN VMA.VALEUR > 2 * Seuil         THEN 0 
                         WHEN VMA.VALEUR > ???               THEN ???
                         WHEN Seuil < VMA.VALEUR < 2 * Seuil THEN 100 - 100 * (valeur - seuil) / Seuil100
                      END 
    FROM VALEUR_MESURE_APPLI VMA
         INNER JOIN GRP_APPLI GA
               ON VMA.IDAPPLICATION = GA.IDAPPLICATION
                  AND GA.IDgrp = ???.IDgrp
    Merci
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre du Club Avatar de magic charly
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 67
    Points
    67
    Par défaut
    Create table TABLE VALEUR_MESURE_APPLICATION

    create table VALEUR_MESURE_APPLI
    (
    IDAPPLICATION NUMBER not null,
    VALEUR FLOAT,
    DATE_MES DATE not null,
    PERFORMANCE FLOAT,
    )
    -- Create/Recreate primary, unique and foreign key constraints
    alter table VALEUR_MESURE_APPLI add constraint PK_M_APPLI primary key (DATE_MES,IDAPPLICATION)

    Create table TABLE CO_GRP_APPLICATION

    create table TABLE CO_GRP_APPLICATION
    (
    IDGRP NUMBER not null,
    IDapplicationNUMBER not null
    )
    alter table CO_GRP_APPLICATION
    add constraint PK_CO_GRP_APPLICATION primary key (IDGRP,IDapplication)

    Create table TABLE GRP_APPLICATION

    create table TABLE GRP_APPLICATION
    (
    IDGRP NUMBER not null,
    NOM VARCHAR2(32),
    SEUIL_PERF NUMBER,
    )
    alter table GRP_APPLICATION
    add constraint PK_GRP_APPLI primary key (IDGRP)

  4. #4
    Membre du Club Avatar de magic charly
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par SQLpro

    Quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UPDATE VALEUR_MESURE_APPLI
    SET PERFORMANCE = CASE
                         WHEN VMA.VALEUR > 2 * Seuil         THEN 0 
                         WHEN VMA.VALEUR > ???               THEN ???
                         WHEN Seuil < VMA.VALEUR < 2 * Seuil THEN 100 - 100 * (valeur - seuil) / Seuil100
                      END 
    FROM VALEUR_MESURE_APPLI VMA
         INNER JOIN GRP_APPLI GA
               ON VMA.IDAPPLICATION = GA.IDAPPLICATION
                  AND GA.IDgrp = ???.IDgrp
    Merci
    dsl même en ayant relu mon post j'ai vu que j'avais laissé des erreurs
    si je me base sur ta proposition en essayant de modifier les blancs dues a mes imprécision j'arrive à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    UPDATE VALEUR_MESURE_APPLI
    SET PERFORMANCE = CASE
                         WHEN VMA.VALEUR > 2 * GA.Seuil         THEN 0 
                         WHEN VMA.VALEUR < GA.Seuil             THEN 100
                         WHEN GA.Seuil < VMA.VALEUR < 2 * GA.Seuil THEN 100 - 100 * (VMA.valeur - GA.seuil) / GA.Seuil
                      END 
    FROM VALEUR_MESURE_APPLI VMA
         INNER JOIN GRP_APPLICATION GA
               ON VMA.IDAPPLICATION = GA.IDAPPLICATION
                  AND GA.IDgrp = CO_GRP_APPLICATION.IDgrp
    qu'en penses tu?
    la syntaxe au sein du case correspond elle bien a une syntaxe SQL?

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Vérifie bien que oracle accepte le CASE....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Membre du Club Avatar de magic charly
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 67
    Points
    67
    Par défaut
    En regardant sur internet j'ai vu plusieurs exemples de case dans le cas de SGBD ORACLE.

    j'en ai trouvé un exemple simple sur la FAQ Oracle de developpez.com

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select   x, 
             isNumeric(x), 
             case 
                when isNumeric(x) = 1 then 1000*to_number(x) 
             end x_fois_1000 
    from     TEST

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

Discussions similaires

  1. Utiliser if ou case ?
    Par Christophe Charron dans le forum Requêtes
    Réponses: 1
    Dernier message: 29/06/2007, 14h29
  2. [Oracle] utilisation d'index auto-incrimente
    Par Bourak dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/05/2007, 11h12
  3. Utilisation de Use Case
    Par Promeneur dans le forum Cas d'utilisation
    Réponses: 2
    Dernier message: 21/11/2006, 16h42
  4. [Oracle] utilisation d'une séquence
    Par magic charly dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/04/2006, 09h39
  5. [Debutant] URL utilisable depuis une case d'un tableau de BD
    Par Marc_3 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/04/2005, 19h06

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