Während sie nicht dasselbe sind, in einem gewissen Sinne DISTINCT impliziert eine GROUP BY, denn jeder DISTINCT neu geschrieben werden konnte GROUP mit BY statt. Vor diesem Hintergrund macht es keinen Sinn, nach etwas zu ordnen, das nicht in der Gesamtgruppe liegt.
Zum Beispiel, wenn Sie eine Tabelle wie folgt aus:
col1 col2
---- ----
1 1
1 2
2 1
2 2
2 3
3 1
und dann versuchen, es so zu fragen:
SELECT DISTINCT col1 FROM [table] WHERE col2 > 2 ORDER BY col1, col2
, die keinen Sinn machen würde, weil es konnte Ende up mehrere col2 Werte pro Zeile sein. Welchen sollte es für die Bestellung verwenden? Natürlich wissen Sie in dieser Abfrage, dass die Ergebnisse nicht so sein würden, aber der Datenbankserver kann das nicht im Voraus wissen.
Jetzt ist Ihr Fall ein wenig anders. Sie haben alle Spalten aus der order by
-Klausel in der select
-Klausel eingefügt, und daher scheint es auf den ersten Blick so, als ob sie alle gruppiert wären. Einige dieser Spalten wurden jedoch in ein berechnetes Feld eingeschlossen. Wenn Sie dies in Kombination mit distinct tun, kann die distinct
Direktive nur auf die Endergebnisse der Berechnung angewendet werden: Es weiß nichts über die Quelle der Berechnung mehr.
Das bedeutet, dass der Server nicht wirklich weiß, dass er auf diese Spalten zählen kann. Es weiß, dass sie verwendet wurden, aber es weiß nicht, ob die Berechnungsoperation einen ähnlichen Effekt wie in meinem ersten einfachen Beispiel verursachen könnte.
Jetzt müssen Sie etwas anderes tun, um dem Server mitzuteilen, dass die Spalten für die Bestellung in Ordnung sind.Es gibt mehrere Möglichkeiten, das zu tun, aber dieser Ansatz sollte in Ordnung arbeiten:
SELECT rsc.RadioServiceCodeId,
rsc.RadioServiceCode + ' - ' + rsc.RadioService as RadioService
FROM sbi_l_radioservicecodes rsc
INNER JOIN sbi_l_radioservicecodegroups rscg
ON rsc.radioservicecodeid = rscg.radioservicecodeid
WHERE rscg.radioservicegroupid IN
(SELECT val FROM dbo.fnParseArray(@RadioServiceGroup,','))
OR @RadioServiceGroup IS NULL
GROUP BY rsc.RadioServiceCode,rsc.RadioServiceCodeId,rsc.RadioService
ORDER BY rsc.RadioServiceCode,rsc.RadioServiceCodeId,rsc.RadioService
Wahrscheinlich eine gute Idee, um das Warum von diesem zu erweitern - insbesondere die Tatsache, dass die Spalten nicht eindeutig identifiziert werden, wenn sie in einem berechneten Feld verwendet werden. –
Neugierig, was die SNYtax ORDER BY 1, 2 tut. – Xaisoft
Bestellung von 1, 2 arbeitete für mich in SQL Server. 1,2,3, ... sind im Grunde 1 basierte Indizes der Spalten, die in der SELECT [1,2,3] -Anweisung verwendet werden. Das habe ich bekommen. –