2010-03-23 20 views
14

Mam następujący test-code:SQL porządek sortowania z wartości Null ostatnich

CREATE TABLE #Foo (Foo int) 

INSERT INTO #Foo SELECT 4 
INSERT INTO #Foo SELECT NULL 
INSERT INTO #Foo SELECT 2 
INSERT INTO #Foo SELECT 5 
INSERT INTO #Foo SELECT 1 

SELECT * FROM #Foo 
ORDER BY 
    CASE WHEN Foo IS NULL THEN Foo DESC ELSE Foo END 

DROP TABLE #Foo 

Próbuję następujący wynik:

 
1 
2 
3 
4 
5 
NULL 

"Jeśli NULL następnie umieścić go ostatni"

Jak to zrobić za pomocą SQL 2005

/M

Odpowiedz

19

Jednym ze sposobów jest do sortowania to tak:

ORDER BY 
(CASE WHEN Foo IS NULL THEN 1 ELSE 0 END), Foo 

Lub: sortuj według null, następnie sortować według treści Foo.

3

Można również zrobić

SELECT * FROM #Foo ORDER BY COALESCE(Foo, 2147483647) 

który zastąpi NULL z możliwie największą int dla celów sortowania tylko (tak pozostawiając wartości retured sam) i tak manewrowania go do tyłu dowolnej kolejności.

+0

Er, odłóżmy powód, dlaczego żuchwy? Zaznacz to, jeśli chcesz, robi dokładnie to, o co pytał plakat i jest tak samo skuteczne, jak inne zamieszczone rozwiązanie dla mniejszej ilości kodu. – eftpotrm

+3

Oprócz innych kwestii, ma to wady związane ze znajomością "maksymalnej wartości" (i zapewnieniem, że tak naprawdę nie jest używana do czegoś innego). –

Powiązane problemy