Distinct / order by

Kikuts Messages postés 159 Date d'inscription jeudi 11 janvier 2007 Statut Membre Dernière intervention 5 novembre 2010 - 21 juin 2010 à 09:49
 GHARSA - 3 sept. 2013 à 14:38
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

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
30 juin 2010 à 00:25
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
1
select a,b,c,d
from table
group by a,b,c,d
order by abs(b)
0
Rejoignez-nous