[SQL] Petit problème avec clause SELECT

Petit problème avec clause SELECT [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 22-09-2005 à 13:34:12    

Yop!
 
Je comprends pas pourquoi je ne peux pas faire ca:
 

Code :
  1. SELECT e.nom, te.nom, e."description", e.dateStart, e.prixParPers
  2. FROM Events e, TypeEvents te
  3. WHERE e.idTypeEvents = te.idTypeEvents
  4.   AND e.visible = 1
  5. GROUP BY te.nom, e.nom, e."description", e.dateStart, e.prixParPers
  6. ORDER BY te.nom, e.nom


 
Il me dit:

Code :
  1. Server: Msg 306, Level 16, State 2, Line 1
  2. The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.


 
Merci pour votre aide!
 
++

Reply

Marsh Posté le 22-09-2005 à 13:34:12   

Reply

Marsh Posté le 22-09-2005 à 13:44:24    

e."description"


:heink:


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 22-09-2005 à 13:45:46    

Je dirais qu'il ne faut pas de champs non varchar dans le order ou le group qui doit faire pour grouper une comparaison.

Reply

Marsh Posté le 22-09-2005 à 14:33:08    

re!
 
ben qd je fais ca:

Code :
  1. SELECT e.nom, te.nom, e."description", e.dateStart, e.prixParPers
  2. FROM Events e, TypeEvents te
  3. WHERE e.idTypeEvents = te.idTypeEvents
  4.   AND e.visible = 1
  5. GROUP BY te.nom, e.nom
  6. ORDER BY te.nom, e.nom


 
il me dit:

Code :
  1. Server: Msg 8120, Level 16, State 1, Line 1
  2. Column 'e.description' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
  3. Server: Msg 8120, Level 16, State 1, Line 1
  4. Column 'e.dateStart' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
  5. Server: Msg 8120, Level 16, State 1, Line 1
  6. Column 'e.prixParPers' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.


 
C'est à choix, mais y'a tjs 1 erreur ou l'autre :D
 
 
et pour le e."description" ben en fait 'description' est un terme réservé apparemment (il se met en bleu!) et si je mets les "", ca marche.

Reply

Marsh Posté le 22-09-2005 à 14:46:12    

tu as essayé un truc genre:
 

Code :
  1. SELECT e.nom, te.nom, e."description" toto, e.dateStart, e.prixParPers
  2.     FROM Events e, TypeEvents te
  3.     WHERE e.idTypeEvents = te.idTypeEvents
  4.       AND e.visible = 1
  5.     GROUP BY te.nom, e.nom,toto
  6.     ORDER BY te.nom, e.nom


 
un truc qui arrive aussi si tu envoyes ton instruction sur un lien odbc, c'est que pour certaines opérations il soit sensible a la casse, le mieux est de faire un desc Events; et voir ce qu'il te retourne et l'écrire de la même façon


Message édité par casimimir le 22-09-2005 à 14:59:56
Reply

Marsh Posté le 22-09-2005 à 15:01:39    

Quand on fait un GROUP BY, c'est pour grouper les données.
Par conséquent, SQL attends que les autres informations à renvoyer soient des MAX, MIN, SUM, etc.
 
Dis plutôt, en français, ce que tu cherches à faire, car j'ai l'impression que le GROUP BY ne sert à rien dans ton cas ...

Reply

Marsh Posté le 22-09-2005 à 15:09:33    

Beegee a écrit :

Quand on fait un GROUP BY, c'est pour grouper les données.
Par conséquent, SQL attends que les autres informations à renvoyer soient des MAX, MIN, SUM, etc.
 
Dis plutôt, en français, ce que tu cherches à faire, car j'ai l'impression que le GROUP BY ne sert à rien dans ton cas ...


 
ben j'ai une table "evenement" et une autre "typeEvenement" et je dois utiliser les données pour les afficher sur des périphérique mobile... donc je ne veux pas tous les champs de la table, mais uniquement pour la table evenement:
 

  • nom
  • description
  • dateStart
  • prixParPers


et pour la table typeEvenement :
 

  • nom


ensuite j'aimerais regrouper le résultat par type d'événement et classer par nom d'événements.
 
C'est pourtant une requête assez simple, je comprends pas!
 
Merci pour votre aide!

Reply

Marsh Posté le 22-09-2005 à 15:13:09    

Et pourquoi pas, tout simplement :
 

Code :
  1. SELECT e.nom as nom_event, te.nom as nom_type_event, e.description, e.dateStart, e.prixParPers
  2. FROM Events e, TypeEvents te
  3. WHERE e.idTypeEvents = te.idTypeEvents
  4. AND e.visible = 1
  5. ORDER BY te.nom, e.nom, e.description, e.dateStart, e.prixParPers;


 
Quand tu dis "regrouper le résultat par type d'événement", ça veut dire trier, en fait, non ???

Reply

Marsh Posté le 22-09-2005 à 15:20:57    

Il n'est pas possible de faire un group by sur ton e."description" à cause de son type. Par contre, si tu veux grouper, il faut que tu groupes par au moins tous les champs qui risquent d'être différents d'un enregistrement à l'autre, donc avec ton e."description".
 
Conclusion, trouve une autre solution :D
 
Au pire tu peux faire CAST/CONVERT, mais ton ntext va se transformer en varchar(8000).

Reply

Marsh Posté le 22-09-2005 à 15:41:00    

Beegee a écrit :

Et pourquoi pas, tout simplement :
 

Code :
  1. SELECT e.nom as nom_event, te.nom as nom_type_event, e.description, e.dateStart, e.prixParPers
  2. FROM Events e, TypeEvents te
  3. WHERE e.idTypeEvents = te.idTypeEvents
  4. AND e.visible = 1
  5. ORDER BY te.nom, e.nom, e.description, e.dateStart, e.prixParPers;


 
Quand tu dis "regrouper le résultat par type d'événement", ça veut dire trier, en fait, non ???


 
ouais en fait c vrai! ca change à rien! vu que je vais avoir que 3 type d'événement, a savoir (conférence / séminaire / formation).
 
Ca a l'air de marcher impecc! merci!

Reply

Marsh Posté le 22-09-2005 à 15:41:00   

Reply

Marsh Posté le 22-09-2005 à 15:42:00    

godbout a écrit :

Il n'est pas possible de faire un group by sur ton e."description" à cause de son type. Par contre, si tu veux grouper, il faut que tu groupes par au moins tous les champs qui risquent d'être différents d'un enregistrement à l'autre, donc avec ton e."description".
 
Conclusion, trouve une autre solution :D
 
Au pire tu peux faire CAST/CONVERT, mais ton ntext va se transformer en varchar(8000).


 
arf, c pour ca que ca marchait pas alors :S

Reply

Marsh Posté le 22-09-2005 à 15:43:26    

ah j'avais encore une question:
 
C'est possible de récupérer une date dans SQL et n'afficher que le jj/mm/aaaa, mais dans 1 seul champ! Pasque pour l'instant il me sort du jj/mm/aaa/hh:mm:ssss ...... un peu long :D

Reply

Marsh Posté le 22-09-2005 à 15:49:05    

Chaque SGBD a sa propre syntaxe pour le formatage des dates.
Avec Oracle, c'est TO_CHAR.
Pour les autres, je sais pas trop, mais si tu tapes sous Google : "<ton SGBD> date functions" tu devrais trouver.

Reply

Marsh Posté le 22-09-2005 à 16:56:54    

le_duc a écrit :

ah j'avais encore une question:
 
C'est possible de récupérer une date dans SQL et n'afficher que le jj/mm/aaaa, mais dans 1 seul champ! Pasque pour l'instant il me sort du jj/mm/aaa/hh:mm:ssss ...... un peu long :D


Si t'es sous SQL-SERVER, moi j'ai pas trouvé un truc potable, donc je change direct dans le code avec des fonctions toutes faites [:ocube]

Reply

Marsh Posté le 22-09-2005 à 17:43:04    

mySql : DATE_FORMAT(<ta date>, '%d/%m/%y')
 
Oracle : TO_CHAR(<ta date>, 'DD/MM/YY')
 
SQL Server : SELECT CONVERT(CHAR(8), <ta date>, 3) pour du dd/mm/yy.
 
cf: http://msdn.microsoft.com/library/ [...] z_2c1f.asp

Reply

Marsh Posté le 22-09-2005 à 19:07:24    

Beegee a écrit :

mySql : DATE_FORMAT(<ta date>, '%d/%m/%y')
 
Oracle : TO_CHAR(<ta date>, 'DD/MM/YY')
 
SQL Server : SELECT CONVERT(CHAR(8), <ta date>, 3) pour du dd/mm/yy.
 
cf: http://msdn.microsoft.com/library/ [...] z_2c1f.asp


 
 :jap:  :jap:  :jap:  :jap:  :jap:  SUPERBE :)
 
juste mettre "103" (ou 104 si on veut des points à la place des /) à la place du 3.
 
Merci beaucoup!!!
 
edit: en fait si on met 3 à la place de 103, on a l'année au format yy et non yyyy


Message édité par le_duc le 23-09-2005 à 15:11:08
Reply

Marsh Posté le 23-09-2005 à 14:56:04    

3 ou 103, c'est pour avoir l'année sur 2 ou 4 chiffres si je me souviens bien :)

Reply

Marsh Posté le 23-09-2005 à 15:10:17    

Beegee a écrit :

3 ou 103, c'est pour avoir l'année sur 2 ou 4 chiffres si je me souviens bien :)


 
ouais, c bien ca, je viens de tester!
 
merci encore.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed