it-swarm.com.de

Wie gebe ich zuletzt Zeilen mit einem bestimmten Wert zurück?

Meine Frage ist umgekehrt zu dieser Frage, ist es möglich, die Sortierreihenfolge zu definieren .

Ich möchte einige Datensätze aus der SQL Server-Datenbank zurückgeben, die in aufsteigender Reihenfolge nach dem Wert einer Spalte sortiert sind, ABER zwei bestimmte Datensätze sollten immer am Ende stehen.

Die ursprüngliche SQL (die geändert werden muss) ist unten:

select code_id as CategoryID, code_desc as CategoryDescription
from codes
where code_id > '000001' and code_id < '000100'
order by CategoryDescription

Die Ergebnisse werden als zurückgegeben

  • 000003 *** Erste Aufzeichnung
  • 000002 *** Ein weiterer Datensatz
  • 000004 Apple
  • 000016 Bücher
  • 000014 Kabel

Ich möchte das folgende Ergebnis (die ersten beiden mit Sternchen am letzten):

  • 000004 Apple
  • 000016 Bücher
  • 000014 Kabel
  • 000003 *** Erste Aufzeichnung
  • 000002 *** Ein weiterer Datensatz

Ich habe die folgende UNION-Anweisung ausprobiert, aber die Ergebnismenge wird automatisch in aufsteigender Reihenfolge sortiert, und diese beiden Zeilen stehen standardmäßig am Anfang.

select code_id as CategoryID, code_desc as CategoryDescription
from codes
where code_id > '000003' and code_id < '000100' 
--order by categoryDescription

UNION

select code_id as CategoryID, code_desc as CategoryDescription
from codes
where code_id > '000001' and code_id < '000004'
4
user1451111

Dies scheint eine viel einfachere Lösung zu sein als die Einführung einer Reihe von Gewerkschaften:

SELECT code_id as CategoryID, code_desc as CategoryDescription
FROM dbo.codes
WHERE code_id > '000001' AND code_id < '000100'
ORDER BY CASE code_id
  WHEN '000002' THEN 3
  WHEN '000003' THEN 2 
  ELSE 1 END, CategoryDescription; 
5
Aaron Bertrand

Versuchen Sie so etwas:

Select CategoryID, CategoryDescription from
(
select 1 as SortOrder, code_id as CategoryID, code_desc as CategoryDescription
from codes
where code_id > '000003' and code_id < '000100' 
--order by categoryDescription

UNION ALL

select 2 as SortOrder, code_id as CategoryID, code_desc as CategoryDescription
from codes
where code_id = '000003'

UNION ALL

select 3 as SortOrder, code_id as CategoryID, code_desc as CategoryDescription
from codes
where code_id = '000002'
) a
order by SortOrder  --and whatever else
1
Scott Hodgin