Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1396 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Petit problème avec clause SELECT

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] Petit problème avec clause SELECT

n°1205028
le_duc
PlaTyPuS
Posté le 22-09-2005 à 13:34:12  profilanswer
 

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!
 
++

mood
Publicité
Posté le 22-09-2005 à 13:34:12  profilanswer
 

n°1205031
boulax
Inserer phrase hype en anglais
Posté le 22-09-2005 à 13:44:24  profilanswer
 

e."description"


:heink:


---------------
Posté depuis des chiottes, sales. Me gusta.
n°1205035
jogrey
Posté le 22-09-2005 à 13:45:46  profilanswer
 

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

n°1205084
le_duc
PlaTyPuS
Posté le 22-09-2005 à 14:33:08  profilanswer
 

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.

n°1205111
casimimir
Posté le 22-09-2005 à 14:46:12  profilanswer
 

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
n°1205139
Beegee
Posté le 22-09-2005 à 15:01:39  profilanswer
 

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 ...

n°1205156
le_duc
PlaTyPuS
Posté le 22-09-2005 à 15:09:33  profilanswer
 

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!

n°1205162
Beegee
Posté le 22-09-2005 à 15:13:09  profilanswer
 

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 ???

n°1205173
godbout
Génial.
Posté le 22-09-2005 à 15:20:57  profilanswer
 

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).

n°1205186
le_duc
PlaTyPuS
Posté le 22-09-2005 à 15:41:00  profilanswer
 

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!

mood
Publicité
Posté le 22-09-2005 à 15:41:00  profilanswer
 

n°1205189
le_duc
PlaTyPuS
Posté le 22-09-2005 à 15:42:00  profilanswer
 

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

n°1205191
le_duc
PlaTyPuS
Posté le 22-09-2005 à 15:43:26  profilanswer
 

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

n°1205194
Beegee
Posté le 22-09-2005 à 15:49:05  profilanswer
 

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.

n°1205287
godbout
Génial.
Posté le 22-09-2005 à 16:56:54  profilanswer
 

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]

n°1205372
Beegee
Posté le 22-09-2005 à 17:43:04  profilanswer
 

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

n°1205483
le_duc
PlaTyPuS
Posté le 22-09-2005 à 19:07:24  profilanswer
 

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
n°1205935
Beegee
Posté le 23-09-2005 à 14:56:04  profilanswer
 

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

n°1205954
le_duc
PlaTyPuS
Posté le 23-09-2005 à 15:10:17  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Petit problème avec clause SELECT

 

Sujets relatifs
[VBS]Problème de taille d'un fichier non mis à jour...[EDIT]Problème installation JGrasp
CSS : problème de borderprobleme de chargement de fichier xml
Problème avec shellexecuteproblème avec les états sur access
Probleme avec la fonction mail() de PHPProblème de droits pour touch(), chmod
Problème pour lancer une action[VB .Net 2003] Problème de cryptage 3DES
Plus de sujets relatifs à : [SQL] Petit problème avec clause SELECT


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR