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*Plus Oracle Discussion :

[oracle 9i] optimiser fonction decode


Sujet :

Sql*Plus Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 193
    Par défaut [oracle 9i] optimiser fonction decode
    Bonjour,

    Pouvez vous m'aider à optimiser cette requête 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
    select datecr,j.libelle,decode(substr(compte,1,2),'91','LV',
                                                  '90','LS',
                                                  '92','Ra',
                                                  '93','CT') lib,sum(nvl(credit,0))
    from  Xecriture e,Xjour j
    where j.journal=e.journal
    and   e.societe=j.societe and e.societe=1
    and   j.journal in('11','12')
    and   datecr between '01/03/09' and '31/03/09'
    group by decode(substr(compte,1,2),'91','LV',
                                       '90','LS',
                                       '92','Ra',
                                       '93','CT') ,datecr,j.libelle
    union 
    select datecr,j.libelle, decode(substr(compte,1,1),'7','PA' ) lib,sum(nvl(credit,0))
    from Xecriture e,Xjour j
    where j.journal=e.journal
    and   e.societe=j.societe and e.societe=1
    and   j.journal in('11','12')
    and   datecr between '01/03/09' and '31/03/09'
    group by datecr,j.libelle, decode(substr(compte,1,1),'7','PA' )
    union
     select datecr,j.libelle, decode(substr(compte,1,5),'44221','Tb')lib,  sum(nvl(credit,0))                                                
    from Xecriture e,Xjour j
    where j.journal=e.journal
    and   e.societe=j.societe and e.societe=1
    and   j.journal in('11','12')
    and   datecr between '01/03/09' and '31/03/09'
    group by datecr,j.libelle,                                         
    decode(substr(compte,1,5),'44221','Tb')
    Merci de votre aide

  2. #2
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    Bonjour, tu ferais mieux de transerer ca a SQL et non ici

    Sinon peux tu préciser la version oracle ?

    Et peux tu poster le plan d'execution stp ?

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Le fait de faire trois unions dans votre requête mutiliplie votre credit par trois, est-ce volontaire (surtout avec le libellé qui est nul) ?

    Regardez du côté de la fonction CASE, qui est un decode beaucoup plus moderne.
    Profitez-en pour moderniser votre jointure également avec un INNER JOIN.
    Comparez votre champ "datecr" avec des dates et non pas avec des littéraux.

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

    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
    Billets dans le blog
    4
    Par défaut
    Les UNION sont coûteux car ils font un DISTINCT (donc un tri).
    Attention à la date, mieux vaut toujours mettre une vraie date

    Avec des decode en une seule requête ça marche.
    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
    SELECT datecr, j.libelle, 
    	DECODE( SUBSTR(compte,1,5), 
    		'44221','Tb', 
          		DECODE(SUBSTR(compte,1,2),
          			'91','LV', '90','LS', '92','Ra', '93','CT',
                		DECODE( SUBSTR(compte,1,1),'7','PA')
                )
          ) lib, SUM(NVL(credit,0))
    FROM  Xecriture e, Xjour j
    WHERE j.journal = e.journal
    AND   e.societe = j.societe 
    AND e.societe=1
    AND   j.journal IN ('11','12')
    AND   datecr BETWEEN TO_DATE('01/03/09','DD/MM/RR') AND TO_DATE('31/03/09', 'DD/MM/RR')
    GROUP BY datecr, j.libelle, DECODE( SUBSTR(compte,1,5), 
    			'44221','Tb', 
          	DECODE(SUBSTR(compte,1,2),
          			'91','LV', '90','LS', '92','Ra', '93','CT',
                	DECODE( SUBSTR(compte,1,1),'7','PA')
                	)
          )

Discussions similaires

  1. équivalent DB2 à la fonction DECODE d'ORACLE
    Par jdlille dans le forum DB2
    Réponses: 2
    Dernier message: 29/03/2007, 11h23
  2. Problème fonction decode()
    Par chti_juanito dans le forum Administration
    Réponses: 11
    Dernier message: 15/02/2006, 20h00
  3. Fonction decode
    Par nad dans le forum Oracle
    Réponses: 7
    Dernier message: 30/12/2005, 15h39
  4. [Optimisation][Fonction]calcul du nombre de jours ...
    Par m-mas dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 26/10/2005, 14h39
  5. [Oracle 9i] Optimisation
    Par al_one dans le forum Oracle
    Réponses: 4
    Dernier message: 19/10/2005, 12h10

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