2017-07-27 3 views
1

Ich habe Abfrage, wo ich distinct und Reihenfolge verwenden. Zwei Spalten, die in der by-Klausel verwendet werden, werden in der SELECT-Anweisung verwendet, sie werden jedoch verkettet. Sobald ich die Abfrage Fehlermeldung ausgeführt erschienen:SQL Order By, wenn DISTINCT?

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

Hier Beispiel meiner Abfrage ist:

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

Eine Lösung, die ich gefunden ein weiteres Mal, aber getrennt si_last und si_first ausgewählt haben. Etwas wie folgt aus:

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

Lösung oben scheint sehr ineffizient und ich frage mich, ob es andere Möglichkeit, um dieses Problem zu umgehen. Bitte, wenn Sie irgendwelche Vorschläge haben, lassen Sie es mich wissen. Vielen Dank.

+0

Mögliche Duplikat (https [ORDER BY-Elemente in der Auswahlliste, wenn SELECT DISTINCT angegeben erscheinen muss]: //stackoverflow.com/questions/265628/order-by-items-must-appear-in-the-select-list-if-select-distinct-ispecified) siehe auch [Grund für ORDER BY-Elemente müssen in der erscheinen Wählen Sie die Liste, wenn Sie distinct auswählen] (https://stackoverflow.com/questions/18584520/reason-for-order-by-items-must-appear-in-the- select-list-if-select-distinct-is) – hatchet

Antwort

0

Verwenden Sie einfach den vollen Ausdruck:

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

Alternativ verwenden GROUP BY:

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

Die erste dieser beiden könnte zu einer etwas anderen Reihenfolge führen, als wenn die letzte und die erste separat bestellt werden. Zum Beispiel im Fall von doppelten Nachnamen, getrennt durch ein Leerzeichen (typisch für hispanische Nachnamen). – hatchet