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 :

[oracle 9i] Requete compliquée


Sujet :

Oracle

  1. #1
    Inscrit
    Inscrit en
    Avril 2004
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 193
    Points : 94
    Points
    94
    Par défaut [oracle 9i] Requete compliquée
    bonjour

    je demandais comment on pourrait formuler cette requete autrement :
    select (select (nvl(cred,0))-(nvl(deb,0)) from solde s1
    where societe=1 and compte like '92%' and
    exercice = (select max(exercice) from solde s2 where
    s1.societe=s2.societe and s1.compte=s2.compte))
    +
    (select (nvl(cred,0)-nvl(deb,0)) from solde s1
    where societe=1 and compte like '92%' and
    exercice = (select max(exercice)-1 from solde s2 where
    s1.societe=s2.societe and s1.compte=s2.compte) and exists
    (select 'x' from tab_erxercice c where c.societe=s1.societe and c.exercice=s1.exercice and c.encours='O')) solde
    from dual
    parce si je l'execute comme telle SQL me ceci :
    ERROR à la ligne 1 :
    ORA-01427: Sous-interrogation ramenant un enregistrement de plus d'une ligne
    si on execute les requete séparement ca marche sans aucun probleme

    merci de votre aide

    table solde (compte,cred,deb,exercice);
    table tab_exercice(exercice, encours);

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 138
    Points : 166
    Points
    166
    Par défaut
    Peux-tu réécrire ta requete avec une indentation décente afin de faciliter la compréhension des gens qui t'aident! Je ne connais personne qui est intéressé à trouver un bug la dedans!

    De plus, le message est très clair, tu as une requête qui ne devrait ramener qu'une seule ligne qui en ramène plusieurs. Ca cause évidemment un problème

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 138
    Points : 166
    Points
    166
    Par défaut
    A mon avis, c'est seulement ta jointure avec la première requete qui te manque. Il faudrait remplacer les conditions de compte et société dans la seconde requete par la pk de la première. Ce que tu veux, c'est ajouter la somme de l'exercice suivant à chaque occurence de l,exercice courant. Pour ce faire, tu dois ramener la valeur de la somme de l'exercice suivant seulement pour la ligne en cours et non pas ramener toutes les sommes de l'exercice courant et celles de l'exercice suivant et demander à Oracle de faire le lien et de les ajouter...

  4. #4
    Inscrit
    Inscrit en
    Avril 2004
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 193
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Herveg
    bonjour

    je demandais comment on pourrait formuler cette requete autrement :


    parce si je l'execute comme telle SQL me ceci :

    si on execute les requete séparement ca marche sans aucun probleme

    merci de votre aide

    table solde (compte,cred,deb,exercice);
    table tab_exercice(exercice, encours);

  5. #5
    Inscrit
    Inscrit en
    Avril 2004
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 193
    Points : 94
    Points
    94
    Par défaut
    ok
    select (select (nvl(cred,0))-(nvl(deb,0))
    from solde s1
    where societe=1
    and compte like '92%'
    and exercice = (select max(exercice)
    from solde s2
    where s1.societe=s2.societe
    and s1.compte=s2.compte)
    )
    +
    (select (nvl(cred,0)-nvl(deb,0))
    from solde s1
    where societe=1 and compte like '92%' and
    exercice = (select max(exercice)-1
    from solde s2
    where s1.societe=s2.societe
    and s1.compte=s2.compte)
    and exists (select 'x' from tab_exercice c
    where c.societe=s1.societe
    and c.exercice=s1.exercice and c.encours='O')
    ) solde
    from dual;

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Points : 95
    Points
    95
    Par défaut indentation "décente"
    Citation Envoyé par bpprive
    Peux-tu réécrire ta requete avec une indentation décente afin de faciliter la compréhension des gens qui t'aident! Je ne connais personne qui est intéressé à trouver un bug la dedans!

    De plus, le message est très clair, (...)
    Voici donc le code reformulé par Hergeb
    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
     select (select (nvl(cred,0))-(nvl(deb,0)) 
    from solde s1
    where societe=1 
    and compte like '92%' 
    and exercice = (select max(exercice) 
    from solde s2 
    where s1.societe=s2.societe 
    and s1.compte=s2.compte)
    )
    +
    (select (nvl(cred,0)-nvl(deb,0)) 
    from solde s1
    where societe=1 and compte like '92%' and 
    exercice = (select max(exercice)-1 
    from solde s2 
    where s1.societe=s2.societe 
    and s1.compte=s2.compte)
    and exists (select 'x' from tab_exercice c 
    where c.societe=s1.societe 
    and c.exercice=s1.exercice and c.encours='O')
    ) solde
    from dual;



    Bon, à part ça, est-ce que la réponse détaillée de BPPRIVE a permis de résoudre l'erreur? Si oui, merci de penser à mettre la balise "résolu"

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Si j'ai bien compris ce que tu essais de faire (sois dit en passant, une explication en mots de ce que tu veux obtenir en plus du code SQL facilite GRANDEMENT l'interprétation et la solution du problème), le code ci-dessous devrait régler ton problème.

    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
    31
    32
    33
    34
    35
    36
    37
     
    select	(
    		select	sum(nvl(cred,0) - nvl(deb,0))
    		  from	solde s1
    		 where	societe  = 1
    		   and	compte   like '92%'
    		   and	exercice =
    			(	
    				select	max(exercice)
    				  from	solde s2
    				 where	s1.societe = s2.societe
    				   and	s1.compte  = s2.compte
    			)
    	)
    +
    	(
    		select	sum(nvl(cred,0) - nvl(deb,0))
    		  from	solde s1
    		 where	societe  = 1
    		   and	compte   like '92%'
    		   and	exercice =
    			(
    				select	max(exercice) - 1
    				  from	solde s2
    				 where	s1.societe = s2.societe
    				   and	s1.compte  = s2.compte
    			)
    		   and	exists
    			(
    				select	'x'
    				  from	tab_exercice c
    				 where	c.societe  = s1.societe
    				   and	c.exercice = s1.exercice
    				   and	c.encours  = 'O'
    			)
    	) solde
      from	dual;

  8. #8
    Inscrit
    Inscrit en
    Avril 2004
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 193
    Points : 94
    Points
    94
    Par défaut
    Merci !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/09/2007, 11h14
  2. [oracle] des requetes compliquées
    Par Rukia dans le forum Langage SQL
    Réponses: 1
    Dernier message: 25/06/2007, 18h05
  3. requete compliquer pour generer graphique
    Par keiser1080 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 30/01/2006, 09h02
  4. DELPHI ORACLE et REQUETES OUVERTES
    Par klingc dans le forum Bases de données
    Réponses: 3
    Dernier message: 21/06/2005, 13h51
  5. Réponses: 3
    Dernier message: 17/05/2004, 17h28

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