2017-07-27 2 views
1

J'ai une requête où j'utilise distinct et ordonne par. Deux colonnes utilisées dans la clause order by sont utilisées dans l'instruction Select, mais elles sont concaténées. Une fois que je lance le message d'erreur de requête est apparu:SQL Order By lorsque DISTINCT?

Msg 145, Level 15, State 1, Line 1 
ORDER BY items must appear in the select list if SELECT DISTINCT is specified. 

Voici exemple de ma requête:

SELECT DISTINCT 
    si_last +' '+si_first AS UserName 
FROM Users 
ORDER BY si_last,si_first 

Une solution que j'ai trouvé est d'avoir si_last et si_first sélectionné une fois de plus, mais séparément. Quelque chose comme ceci:

SELECT DISTINCT 
    si_last +' '+si_first AS UserName, 
    si_last, 
    si_first 
FROM Users 
ORDER BY si_last,si_first 

solution ci-dessus semble très inefficace et je me demande s'il y a d'autre moyen de contourner ce problème. S'il vous plaît si vous avez des suggestions s'il vous plaît faites le moi savoir. Je vous remercie.

+0

double possible de [ORDER BY Les articles doivent apparaître dans la liste de sélection si est spécifiée SELECT DISTINCT] (https: //stackoverflow.com/questions/265628/order-by-items-must-appear-in-the-select-list-if-select-distinct-is-specified) voir aussi [Raison pour les articles ORDER BY doivent apparaître dans le sélectionnez la liste si sélectionnez distinct] (https://stackoverflow.com/questions/18584520/reason-for-order-by-items-must-appear-in-the- select-list-if-select-distinct-is) – hatchet

Répondre

0

Il suffit d'utiliser la pleine expression:

SELECT DISTINCT (si_last + ' ' + si_first) AS UserName 
FROM Users 
ORDER BY UserName; 

Vous pouvez également utiliser GROUP BY:

SELECT (si_last + ' ' + si_first) AS UserName 
FROM Users 
GROUP BY si_last, si_first 
ORDER BY si_last, si_first; 
+1

Le premier de ces deux pourrait entraîner un ordre légèrement différent que si le dernier et le premier sont commandés séparément. Par exemple, dans le cas de deux noms séparés par un espace (typique pour les noms de famille hispaniques). – hatchet