Précédent   Forum des professionnels en informatique > Bases de données > Autres SGBD > InterBase
InterBase Forum d'entraide sur le SGBD InterBase de Codegear. Avant de poster -> F.A.Q Interbase, Tutoriels
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 12/04/2011, 12h45   #1
Membre du Club
 
Inscription : novembre 2006
Messages : 219
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 219
Points : 68
Points : 68
Par défaut Erreur dans requête avec DISTINCT

Bonjour,
J'ai une table du genre
Code :
1
2
3
4
5
6
7
8
9
10
 
CREATE TABLE "RESERVATION" 
(
  "IDCLIENT"	VARCHAR(10) NOT NULL,
  "NOM"	VARCHAR(60) NOT NULL,
  "DEBUT"	DATE NOT NULL,
  "FIN"	DATE NOT NULL,
  "CHAMBRE" VARCHAR(2) NOT NULL,
 PRIMARY KEY ("IDCLIENT")
);
Et soit les lignes suivantes dans la table:

Citation:
IDCLIENT NOM DEBUT FIN CHAMBRE
01 AA 01/04/2010 17/05/2010 01
02 BB 18/05/2010 13/06/2010 02
03 CC 14/06/2010 14/07/2010 01
04 DD 15/07/2010 19/08/2010 04
05 EE 15/07/2010 19/08/2010 03
Moi je veux par une requête SQL en Interbase, recupérer la dernière reservation de la table suivant la date de DEBUT. Les colonnes renvoyées sont: DEBUT, FIN, MOIS_ANNEE avec MOIS_ANNEE la colonne renommée qui renvoit que le mois en lettre et l'année.
NB Pas de doublon

Dans notre table, nous aurons:
Citation:

DEBUT FIN MOIS_ANNEE


15/07/2010 19/08/2010 JUILLET 2010
Soit la requête que j'effectue:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
SELECT R.DEBUT, R.FIN,
CASE WHEN EXTRACT(MONTH FROM R.DEBUT)= 1 THEN 'JANVIER' || '  ' || EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 2 THEN 'FEVRIER' || '  ' ||  EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 3 THEN 'MARS' || '  ' ||  EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 4 THEN 'AVRIL' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 5 THEN 'MAI' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 6 THEN 'JUIN' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 7 THEN 'JUILLET' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 8 THEN 'AOÛT' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 9 THEN 'SEPTEMBRE' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 10 THEN 'OCTOBRE' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 11 THEN 'NOVEMBRE' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 12 THEN 'DECEMBRE' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
  END AS MOIS_ANNEE
FROM RESERVATION R
WHERE R.DEBUT = (SELECT MAX(R2.DEBUT) FROM RESERVATION R2)
En faisant cette requête, je reçois les deux dernières lignes de ma table
Soit:
Citation:

DEBUT FIN MOIS_ANNEE


15/07/2010 19/08/2010 JUILLET 2010
15/07/2010 19/08/2010 JUILLET 2010
Pour que ça m'envoie juste une ligne, j'ai utilisé le mot DISTINCT du genre:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT DISTINCT R.DEBUT, R.FIN,
CASE WHEN EXTRACT(MONTH FROM R.DEBUT)= 1 THEN 'JANVIER' || '  ' || EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 2 THEN 'FEVRIER' || '  ' ||  EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 3 THEN 'MARS' || '  ' ||  EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 4 THEN 'AVRIL' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 5 THEN 'MAI' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 6 THEN 'JUIN' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 7 THEN 'JUILLET' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 8 THEN 'AOÛT' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 9 THEN 'SEPTEMBRE' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 10 THEN 'OCTOBRE' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 11 THEN 'NOVEMBRE' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
       WHEN EXTRACT(MONTH FROM R.DEBUT)= 12 THEN 'DECEMBRE' || '  ' ||   EXTRACT(YEAR FROM R.DEBUT)
  END AS MOIS_ANNEE
FROM RESERVATION R
WHERE R.DEBUT = (SELECT MAX(R2.DEBUT) FROM RESERVATION R2)


Et là je reçois un méssage d'erreur du genre:
Citation:
---------------------------
Erreur
---------------------------
data type not supported for arithmetic.
---------------------------
OK
---------------------------
J'attends vos remarques et propositions.
SOPSOU 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 02h52.


 
 
 
 
Partenaires

Hébergement Web