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 :

creation d'un nouvelle colonne par calcul [Fait]


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut creation d'un nouvelle colonne par calcul
    Bonjour,

    désolée j'ai encore besoin de votre aide...

    J'ai une table qui affiche les remunerations de chaque salarie avec une date :
    EX:
    NOM PRENOM SAL_ID TEMPS_ID REMU
    XXX DAVID 659 2005/12/31 00:00:00.000 28210
    XXX DAVID 659 2006/12/31 00:00:00.000 29000
    XXX DAVID 659 2007/12/31 00:00:00.000 29600
    YY PATRICK 281 2006/12/31 00:00:00.000 28080
    YY PATRICK 281 2007/12/31 00:00:00.000 29230
    WWW MINH THU 1463 2005/12/31 00:00:00.000 61004
    WWW MINH THU 1463 2006/12/31 00:00:00.000 61004
    WWW MINH THU 1463 2007/12/31 00:00:00.000 62900



    Avec cette requete :
    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
     
    SELECT
    S.NOM
    , S.PRENOM
    , sal_id
    , TEMPS_ID
    ,MAX(GREATEST(
     DECODE(REMU_THEO_CADRE_13,NULL,0,REMU_THEO_CADRE_13),
     DECODE(REMU_THEO_ETAM_13 ,NULL, 0, REMU_THEO_ETAM_13),
     DECODE(REMU_THEO_12,NULL,0, REMU_THEO_12)
     )) as REMU
    FROM FRH, SALARIE S
    WHERE  (REMU_THEO_12 is not null or REMU_THEO_CADRE_13 is not null or REMU_THEO_ETAM_13 is not null)
    AND FRH.SALARIE_ID=S.SAL_ID 
    GROUP BY   
     S.NOM
    , S.PRENOM
    , sal_id
    ,temps_id
    Et je cherche a créer une nouvelle colonne dans cette table qui me calcule le pourcentage d'augmentation : (SAL (annee+1) - SAL(annee) / SAL(annee))

    Je suis completement perdue..si vous pouviez me donner un coup de main...

    MErci bcp!

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    1 : Ce n'est pas une table c'est une requete.
    2: Pas de version, pas de réponse.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    C'est une requete qui sera transformée en table dérivée sous Business Objects.

    Sinon pour la version, je suis en oracle 9i....

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    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
    SELECT nom, prenom, sal_id, temps_id, remu, 
    	( lead(remu, 1) OVER PARTITION BY (nom, prenom, sal_id ORDER BY temps_id) 
    	-	remu / remu) AS pct_augment
    FROM (
    	SELECT s.nom, s.prenom, sal_id, temps_id,
    	MAX(GREATEST(
    	 DECODE(remu_theo_cadre_13,NULL,0,remu_theo_cadre_13),
    	 DECODE(remu_theo_etam_13 ,NULL, 0, remu_theo_etam_13),
    	 DECODE(remu_theo_12,NULL,0, remu_theo_12)
    	 )) AS remu
    	FROM FRH, SALARIEs
    	WHERE  (remu_theo_12 IS NOT NULL OR remu_theo_cadre_13 IS NOT NULL OR remu_theo_etam_13 IS NOT NULL)
    	AND frh.salarie_id = s.sal_id 
    	GROUP BY s.nom, s.prenom, sal_id, temps_id
    	ORDER BY s.nom, s.prenom, sal_id, temps_id
    	)
    Attention : Ta fonction d'augmentation est fausse : (SAL (annee+1) - SAL(annee) / SAL(annee))
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    Ah ok ca marche avec les fonctions analytiques...mais je ne maitrise pas du tout ..
    Ma requete fonctionne (en changeant qqs parentheses), par contre je ne sais pas si c'est possible d'afficher la ligne du pourcentage sur l'année suivante...
    Par ex avec cette requete j'obtiens :
    NOM PRENOM SAL_ID TEMPS_ID REMU PCT_AUGMENT
    TOTO TATA 1825 2005/12/31 00:00:00.000 2716 2,35640648
    TOTO TATA 1825 2006/12/31 00:00:00.000 2780 0
    TOTO TATA 1825 2007/12/31 00:00:00.000 2780


    ET si possible obtenir :

    NOM PRENOM SAL_ID TEMPS_ID REMU PCT_AUGMENT
    TOTO TATA 1825 2005/12/31 00:00:00.000 2716
    TOTO TATA 1825 2006/12/31 00:00:00.000 2780 2,35640648
    TOTO TATA 1825 2007/12/31 00:00:00.000 2780 0

  6. #6
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Pour les fonctions analytiques, l'excellent tuto de lalystar :
    http://lalystar.developpez.com/fonctionsAnalytiques/

    Pour le mettre sur la ligne annee + 1 (en fait récupérer par fct analytique l'a ligne précédente) c'est LAG et non pas LEAD qu'il faut utiliser.
    Ou alors mettre LEAD(remu, -1) mais c'est moins pur.

    Si le LEAD (ou LAG) ne trouve pas de ligne, tu as remarqué qu'il met NULL. C'est possible de mettre une valeur pas défaut dans ce cas
    ex LAG(remu, 1, 1)
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 78
    Points
    78
    Par défaut
    COol ca marche!

    thanks

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

Discussions similaires

  1. split avec creation de nouvelles colonnes
    Par ldiaz dans le forum SQL
    Réponses: 0
    Dernier message: 07/10/2010, 09h33
  2. Réponses: 7
    Dernier message: 20/08/2009, 01h48
  3. Réponses: 1
    Dernier message: 29/09/2007, 17h47
  4. Réponses: 1
    Dernier message: 21/06/2007, 18h28
  5. ajouter une nouvelle colonne par un SELECT
    Par maysa dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/09/2006, 13h14

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