Distinct / order by

Signaler
Messages postés
159
Date d'inscription
jeudi 11 janvier 2007
Statut
Membre
Dernière intervention
5 novembre 2010
-
 GHARSA -
Bonjour j'ai un problème avec la requête ci dessous :

si j'enlève le distinct, elle fonctionne et je n'ai pas besoin de spécifier tout les champs dans le order by (seul le con_entree suffit)

mais si je rajoute distinct et le reste des champs, il me dit que je ne les ai pas tous mis.

Je suis persuadé que beaucoup ont déjà eu ce genre d'erreur.

Pour info : je trie la colonne que je cast en date time pour ne pas avoir ceci : 01/01/1995 -- 04/05/2010 -- 07/06/2004 voilà pourquoi je cast en datetime. Cela fonctionne parfaitement sans le distinct pour ceux qui n'ont pas l'habitude de le voir.

Merci pour toute aide !

SELECT distinct
con_id									as 		'Id_conso',
con_numid								as 		'Num_conso',
con_libelle								as 		'Libelle_conso',
con_qte									as 		'qte_conso',
CONVERT(VARCHAR(10), con_entree, 103)	as 		'Date_entree',
CONVERT(VARCHAR(10), con_livre, 103)	as 		'Date_livraison',
con_lot									as 		'Lot',
CONVERT(VARCHAR(10), con_peremp, 103)	as 		'Date_peremption'

FROM CONSOMMABLE
LEFT OUTER JOIN HISTOLIV		ON CAST(CON_ID AS VARCHAR) = HIL_C1
LEFT OUTER JOIN VISITE		ON HIL_VIS_ID = VIS_ID 
LEFT OUTER JOIN PRESCRITION	ON VIS_PRS_ID = PRS_ID 

WHERE PRS_TYPE = 0
AND CON_PAT_ID = 73

ORDER BY cast(con_entree as datetime) desc, 
con_id,con_numid,con_libelle,con_qte,con_livre,con_lot,con_peremp
Msg 145, Niveau 15, État 1, Ligne 2
Les éléments ORDER BY doivent se retrouver dans la liste de sélection si SELECT DISTINCT est spécifié.




Cordialement, Nk54.
A voir également:

2 réponses

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
30
Salut,

La reponse est la http://weblogs.sqlteam.com/jeffs/archive/2007/12/13/select-distinct-order-by-error.aspx

C'est pour la gestion du déterminisme des bases de données.

Il est preferable d'utiliser il me semble le GROUP BY à la place du DISTINCT.

Bon dev
select a,b,c,d
from table
group by a,b,c,d
order by abs(b)