Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 06/12/2010, 18h25   #1
Membre à l'essai
 
Avatar de Fiona08
 
Inscription : juillet 2008
Messages : 108
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 108
Points : 21
Points : 21
Par défaut Probleme avec un Select

Salut à tous,

je fais une secletion sur une table pour dénormaliser les données d’une une table normalisée dans un Select.

Voici mon code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT id_medecin,id_employee,
       max(case when num_visite = 1 then Id_medecins end) AS Id_medecins_1, 
       max(case when num_visite = 1 then Id_employe end) AS Id_employe_1,
       max(case when num_visite = 1 then date_visite end) AS date_visite_1,
 
       max(case when num_visite = 2 then Id_medecins end) AS Id_medecins_2, 
       max(case when num_visite = 2 then Id_employe end) AS Id_employe_2,
       max(case when num_visite = 2 then date_visite end) AS date_visite_2
 
FROM (SELECT 
	Id_medecins, Id_employe, date_visite, num_visite 
       FROM (SELECT Id_medecins,
		    Id_employe,
		    date_visite,
		    row_number() over (partition BY id_medecin ORDER BY date_visite DESC) AS num_visite
	      FROM TABLE
             )
WHERE num_visite <= 3
      )
J'obtient la faute suivante:
00905. 00000 - "missing keyword"

Quelqu'un peut-il me dire où se trouve le probleme?

Meric d'avance
Fiona
Fiona08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 19h36   #2
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Salut,

Change le nom de ta table TABLE par un autre nom, parce que TABLE est un mot réservé.

Pour connaitre tous les mots réservés.
Code :
1
2
3
 
SELECT *
  FROM v$reserved_words
__________________
Publications: http://schelabi.developpez.com/
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 20h14   #3
Membre à l'essai
 
Avatar de Fiona08
 
Inscription : juillet 2008
Messages : 108
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 108
Points : 21
Points : 21
Salut,
ma table ne s'appelle pas "TABLE" c'était juste un exemple pout illustrer le probleme que j'ai.

Merci
Fiona
Fiona08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 20h19   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 463
Points : 10 463
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Il manque le group by à la fin de la requête !

Attention, c'est peut-être une coquille en faisant le copier / coller, mais l'id_medecin est une fois au singulier et une fois au pluriel.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 20h48   #5
Membre à l'essai
 
Avatar de Fiona08
 
Inscription : juillet 2008
Messages : 108
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 108
Points : 21
Points : 21
Salut Waldar,

une petite correction:

le code est plutôt comme ceci. Quand je fais le group by avec les elements qui sont dans le case, cela ne fonctionne pas:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
SELECT max(case when num_visite = 1 then Id_medecins end) AS Id_medecins_1, 
       max(case when num_visite = 1 then Id_employe end) AS Id_employe_1,
       max(case when num_visite = 1 then date_visite end) AS date_visite_1,
 
       max(case when num_visite = 2 then Id_medecins end) AS Id_medecins_2, 
       max(case when num_visite = 2 then Id_employe end) AS Id_employe_2,
       max(case when num_visite = 2 then date_visite end) AS date_visite_2
 
FROM (SELECT 
	Id_medecins, Id_employe, date_visite, num_visite 
       FROM (SELECT Id_medecins,
		    Id_employe,
		    date_visite,
		    row_number() over (partition BY id_medecin ORDER BY date_visite DESC) AS num_visite
	      FROM TABLE
             )
WHERE num_visite <= 3
      )

Fiona
Fiona08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 21h35   #6
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 463
Points : 10 463
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Compte-tenu qu'il s'agit certainement d'une erreur de syntaxe, si vous ne faites pas un copier / coller, on n'y arrivera pas.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/12/2010, 22h34   #7
Membre éprouvé
 
Avatar de xdescamp
 
Homme Xavier Descamps
Inscription : octobre 2008
Messages : 297
Détails du profil
Informations personnelles :
Nom : Homme Xavier Descamps
Âge : 36
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2008
Messages : 297
Points : 422
Points : 422
Envoyer un message via Skype™ à xdescamp
Ca ne serait pas simplement la ligne blanche qui traine entre les "MAX"? Il ne faut pas de ligne vide; pour aérer le code, utilister "--" par exemple.
xdescamp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 11h03   #8
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
Quel est le message d'erreur dans sqlplus?

Code :
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
SQL> SET sqlblanklines ON
SQL> SELECT max(case when num_visite = 1 then Id_medecins end) AS Id_medecins_1,
  2         max(case when num_visite = 1 then Id_employe end) AS Id_employe_1,
  3         max(case when num_visite = 1 then date_visite end) AS date_visite_1,
  4
  5         max(case when num_visite = 2 then Id_medecins end) AS Id_medecins_2,
  6         max(case when num_visite = 2 then Id_employe end) AS Id_employe_2,
  7         max(case when num_visite = 2 then date_visite end) AS date_visite_2
  8
  9  FROM (SELECT
 10     Id_medecins, Id_employe, date_visite, num_visite
 11         FROM (SELECT Id_medecins,
 12                 Id_employe,
 13                 date_visite,
 14                 row_number() over (partition BY id_medecin ORDER BY date_visite DESC) AS num_visite
 15           FROM TABLE
 16               )
 17  WHERE num_visite <= 3
 18        )
 19
 20 ;
             )
             *
ERROR at line 16:
ORA-00906: missing LEFT parenthesis
 
 
SQL> 15  FROM t
SQL> r
  1  SELECT max(case when num_visite = 1 then Id_medecins end) AS Id_medecins_1,
  2         max(case when num_visite = 1 then Id_employe end) AS Id_employe_1,
  3         max(case when num_visite = 1 then date_visite end) AS date_visite_1,
  4
  5         max(case when num_visite = 2 then Id_medecins end) AS Id_medecins_2,
  6         max(case when num_visite = 2 then Id_employe end) AS Id_employe_2,
  7         max(case when num_visite = 2 then date_visite end) AS date_visite_2
  8
  9  FROM (SELECT
 10     Id_medecins, Id_employe, date_visite, num_visite
 11         FROM (SELECT Id_medecins,
 12                 Id_employe,
 13                 date_visite,
 14                 row_number() over (partition BY id_medecin ORDER BY date_visite DESC) AS num_visite
 15   FROM t
 16               )
 17  WHERE num_visite <= 3
 18        )
 19
 20*
 
ID_MEDECINS_1 ID_EMPLOYE_1 DATE_VISITE_1 ID_MEDECINS_2 ID_EMPLOYE_2
------------- ------------ ------------- ------------- ------------
DATE_VISITE_2
-------------
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 14h18   #9
Membre à l'essai
 
Avatar de Fiona08
 
Inscription : juillet 2008
Messages : 108
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 108
Points : 21
Points : 21
Salut à tous,

merci pour vos tips. J'ai oublier le "end" dans le case
Code :
SELECT max(case when num_visite = 1 then Id_medecins end) AS ...
pendant le copier coller.

merci encore pour vos aides
Fiona
Fiona08 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 16h07.


 
 
 
 
Partenaires

Hébergement Web