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

Oracle Discussion :

[Fonctions analytiques] - Clause Where / Having


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut [FONCTION ANALYTIQUE] - WHERE et ORA-30483
    Bonjour a tous !!

    quand j'essai d'inserer une fonction analytique dans une clause 'where' j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ORA-30483: window  functions are not allowed here
    existe t il un moyen de faire une requete du style :
    (mais sans l'erreur 30483)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select F1, F2, (select C1,C2 from T2 where C0=lead(F1) over partition by F0 order by F3) from T1
    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    ce sera plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select F1, F2, (select C0,C1,C2,lead(F1) over partition by F0 order by F3) lcol from T2)  from T1 WHERE C0= lcol

  3. #3
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    cette réponse pose un problème en faite...

    le sous-select ne doit me retourner que 1 seul ligne ; celle qui correspond à mon critère 'interdit'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...where C0=lead(F1)...

  4. #4
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut [FONCTION ANALYTIQUE] - WHERE et ORA-30483
    voila un extrai de la requete...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select ID_PATIENT, dt_trans,
      TR_AGENT1 IDA_AGT_A1, 
      TR_AGENT2 IDA_AGT_A2,
      LEAD(TR_AGENT1)  OVER (partition by no_branc ORDER BY DT_TRANS) IDR_AGT_A1, 
      LEAD(TR_AGENT2)  OVER (partition by no_branc ORDER BY DT_TRANS) IDR_AGT_A2,
    (select NM_AGT || ' ' || PR_AGT from agents where NO_AGT=IDA_AGT_A1) AGT_A1, 
    (select NM_AGT || ' ' || PR_AGT from agents where NO_AGT=IDA_AGT_A2) AGT_A2,
    (select NM_AGT || ' ' || PR_AGT from agents where NO_AGT=IDR_AGT_A1) AGT_R1, 
    (select NM_AGT || ' ' || PR_AGT from agents where NO_AGT=IDR_AGT_A2) AGT_R2,  ----------------------------------------------------------------------------------------
    from brancard order by no_branc
    voila le probleme :

    la requete ci dessus ne fonctionne pas...
    en effet IDA_AGT_A1/A2 et IDR_AGT_A1/2 ne sont pas des colonne mais des alias...

    pour les IDA_xxx pas de probleme je peut utiliser le nom du champs d'origine mais pour les IDR_xxx j'utilise la fonction LEAD() ; sachant qu'un LEAD() est interdit deriere un where... COMMENT FAIRE.

    merci de votre aide...

  5. #5
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Pour tout ce genre de pb, fais avec des sous requêtes, c'est malheureusement la seule manière de faire avec les fonction analytiques....

    Pour le 1ier post, sur le principe, je verais bien une première requête qui renvoie tous tes arguments puis une 2ieme qui fait la jointure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select V1.F1, V1.F2, T2.C1, T2.C2 from 
    (
    select F1, F2, lead(F1) over (partition by F0 order by F3) L1 from T1 
    ) V1,
    T2
    where T2.C0=V1.L1

  6. #6
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    merci pour l'info...

    Bon, sur une requete de plus de 100 lignes c'est compliqué.. mais ca fonctionne !!

    Question :: Oracle 10g corrige t il ce default ?

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

Discussions similaires

  1. Fonction mathematique dans la clause WHERE
    Par mickeydisn dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/02/2007, 16h06
  2. Clause Where en fonction de la valeur d'un champs
    Par gb-ch dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 01/01/2007, 15h45
  3. Vue avec clause Where en fonction du USER
    Par lunab54 dans le forum Oracle
    Réponses: 8
    Dernier message: 29/08/2006, 18h39
  4. [8.i]Fonctions dates et clause Where
    Par jdotti dans le forum Oracle
    Réponses: 6
    Dernier message: 03/08/2006, 18h07
  5. fonction booleenne dans une clause where ?
    Par user_h dans le forum Oracle
    Réponses: 1
    Dernier message: 20/10/2005, 15h05

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