Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Sql*Plus
Sql*Plus Forum d'entraide sur Oracle Sql*Plus
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/09/2007, 05h08   #1
Nouveau Membre du Club
 
Inscription : septembre 2007
Messages : 73
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : septembre 2007
Messages : 73
Points : 30
Points : 30
Par défaut la commande sql ne se termine pas correctement

Bonjour je commence en sql et je ne comprends pas une de mes erreurs. Voici le code:
Code :
1
2
3
4
5
6
7
8
 
 
SQL>  SELECT noArticle, SUM(quantitée) AS quantitéecommandée
  2   FROM lignecommande
  3  GROUP BY noArticle
  4  ORDER BY noarticle
  5  HAVING SUM(quantitée) >= 0
  6  ;
Le message d'erreur est que la ligne 5 ne se termine pas correctement,
est-ce que quelqu'un pourrait m'aider??
watiero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 10h47   #2
Membre éclairé
 
Inscription : août 2005
Messages : 316
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : août 2005
Messages : 316
Points : 342
Points : 342
essai
Code :
1
2
3
4
5
6
7
 
SELECT * FROM 
     (SELECT noArticle, SUM(quantitée) AS quantitéecommandée
  2   FROM lignecommande
  3  GROUP BY noArticle
  4  ORDER BY noarticle)
  5  WHERE quantitéecommandée >= 0 ;
c.langlet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 10h49   #3
Membre du Club
 
Inscription : août 2005
Messages : 68
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 68
Points : 68
Points : 68
Le ORDER BY doit être en dernier (donc après le HAVING).
xavi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 10h50   #4
Membre du Club
 
Inscription : août 2005
Messages : 68
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 68
Points : 68
Points : 68
Citation:
Envoyé par xavi Voir le message
Le ORDER BY doit être en dernier (donc après le HAVING).
De plus le GROUP BY fait un ORDER BY implicite.
xavi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 10h55   #5
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Citation:
Envoyé par c.langlet Voir le message
essai
Code :
1
2
3
4
5
6
7
 
SELECT * FROM 
     (SELECT noArticle, SUM(quantitée) AS quantitéecommandée
  2   FROM lignecommande
  3  GROUP BY noArticle
  4  ORDER BY noarticle)
  5  WHERE quantitéecommandée >= 0 ;
Quel est l'intérêt ?

Essaie plutôt :
Code :
1
2
3
4
5
SQL>  SELECT noArticle, SUM(quantitée) AS quantitéecommandée
  2   FROM lignecommande
  3  GROUP BY noArticle
  4  HAVING SUM(quantitée) >= 0
  5  ORDER BY noarticle;
L'order by doit etre mis en dernier
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 11h11   #6
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Citation:
Envoyé par xavi Voir le message
De plus le GROUP BY fait un ORDER BY implicite.
C'est faux.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 11h46   #7
Membre du Club
 
Inscription : août 2005
Messages : 68
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 68
Points : 68
Points : 68
Citation:
Envoyé par pifor Voir le message
Effectivement : c'est faux.
Il s'agit d'une mauvaise habitude prise avec le mode RULE de la version 7.3.
Les évolutions de l'optimiseur à partir de la version 9 n'autorisent plus ce genre de tour de passe passe.
shame on me (je travaille encore sur de la 7.3 )
xavi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 12h02   #8
Membre éclairé
 
Inscription : août 2005
Messages : 316
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : août 2005
Messages : 316
Points : 342
Points : 342
Citation:
Envoyé par plaineR Voir le message
Quel est l'intérêt ?

Essaie plutôt :
Code :
1
2
3
4
5
SQL>  SELECT noArticle, SUM(quantitée) AS quantitéecommandée
  2   FROM lignecommande
  3  GROUP BY noArticle
  4  HAVING SUM(quantitée) >= 0
  5  ORDER BY noarticle;
L'order by doit etre mis en dernier
Mea maxima culpa, aucun interet
c.langlet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 15h15   #9
Nouveau Membre du Club
 
Inscription : septembre 2007
Messages : 73
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : septembre 2007
Messages : 73
Points : 30
Points : 30
Par défaut une partie du problème réglé...

Alors rebonjour. Merci, j'ai appris qu'il fallait mettre ORDER BY à la fin du code et ca fonctionne. Mais on dirait que ca ne règle pas mon problème. En fait dans ma liste je ne réussi pas à afficher les valeurs nulles.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SQL> SELECT noarticle, sum(quantitéé) AS quantitéecommandée
  2  FROM lignecommande
  3  GROUP BY noarticle
  4  HAVING sum(quantitéé) >= 0
  5  ORDER BY noarticle;
 
 NOARTICLE QUANTIT?ECOMMAND?E
---------- ------------------
        10                 20
        20                  9
        40                  4
        50                  2
        70                  8
        90                  1
        95                  3
 
7 ligne(s) selectionnee(s).
Dans ce cas, certains articles ont des valeurs nulles et je ne réussi pas à les afficher... J'aurais cru qu'en mettant HAVING SUM() >=0, ca aurait fonctionné...

Merci!
watiero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 15h39   #10
Membre du Club
 
Inscription : août 2005
Messages : 68
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 68
Points : 68
Points : 68
null n'est pas égal à 0.
Les opérateurs de comparaison numériques (=, >= , etc ) écartent les valeurs nulles.

En supposant que tu souhaites que null soit égal à 0 (ce qui n'est pas évident en soit et dépend de ton modèle métier), tu peux utiliser la fonction nvl :

Code :
1
2
3
4
5
6
 
 SELECT noarticle, sum(nvl(quantitéé,0)) AS quantitéecommandée
  2  FROM lignecommande
  3  GROUP BY noarticle
  4  HAVING sum(nvl(quantitéé,0)) >= 0
  5  ORDER BY noarticle;
xavi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 16h34   #11
Nouveau Membre du Club
 
Inscription : septembre 2007
Messages : 73
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : septembre 2007
Messages : 73
Points : 30
Points : 30
D'accord alors je me trompe, je voulais dire certaine valeur sont égale à 0 et le code précédent ne les affiche pas avec le HAVING >= 0...

Merci
watiero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 22h17   #12
Nouveau Membre du Club
 
Inscription : septembre 2007
Messages : 73
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : septembre 2007
Messages : 73
Points : 30
Points : 30
Merci mon problème est résolu, je devais utiliser un natural left join. Je n'ai pas su exposer mon problème comme il se devait mais je vous remercie beaucoup tout de même!
watiero est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h07.


 
 
 
 
Partenaires

Hébergement Web