Sortowanie wierszy z NULL w MS SQL Server

0

Poniżej zaprezentowany kod

SELECT ProductNumber, Size
FROM AdventureWorksLT2012.SalesLT.Product
ORDER BY CASE
    WHEN Size IS NULL THEN 1
        ELSE 0
    END,
Size

zwraca wyniki posortowane rosnąco według kolumny "Size", przy czym wiersze w których "Size" przyjmuje wartość "NULL", są umieszczone na końcu tabeli (normalnie byłyby na jej początku). No ok, kod działa, ale jak zrozumieć to umieszczenie wyników z "NULL" na końcu tabeli? Dlaczego instrukcja "ORDER BY CASE" wyrzuca je na koniec a nie na początek tabeli? Nie potrafię powiązać sortowania z jedynką zamiast "NULL" z umieszczeniem wyniku na końcu tabeli.

0
SELECT ProductNumber, SIZE, CASE
    WHEN SIZE IS NULL THEN 1
        ELSE 0
    END tajna_kolumna
FROM AdventureWorksLT2012.SalesLT.Product
ORDER BY CASE
    WHEN SIZE IS NULL THEN 1
        ELSE 0
    END,
SIZE

odpal, pomyśl

0

Dlatego, że sortujesz rosnąco.
Tam gdzie size ma jakąś wartość CASE wstawia 0, tam gdzie size jest NULL CASE wstawia 1, na górze będą 0 (czyli "nie nulle") a po nich 1 (czyli nulle).

0

order by case? Nie ma czegoś takiego.

Zapisz to po ludzku:

SELECT ProductNumber, Size
FROM AdventureWorksLT2012.SalesLT.Product
ORDER BY 
    CASE WHEN Size IS NULL THEN 1 ELSE 0 END,
    Size

case when then operuje na kolumnie i zwraca określoną wartość dla określonej wartości kolumny. Ty po prostu sortujesz po wyniku tej konstrukcji.

0
hipekk napisał(a):

Dlatego, że sortujesz rosnąco.
Tam gdzie size ma jakąś wartość CASE wstawia 0, tam gdzie size jest NULL CASE wstawia 1

Tak to rozumiem, ale

hipekk napisał(a):

na górze będą 0 (czyli "nie nulle") a po nich 1 (czyli nulle).

no nie bardzo. Dołączyłem plik tekstowy z wynikami zapytania. Liczby "0" i "1" w ogóle nie pojawiają się w wynikach.

0

MOJE ZAPYTANIE SOBIE ODPAL I POPATRZ NA WYNIKI!!!!!

0

W SELECT masz SIZE a w ORDER BY masz ORDER BY CASE WHEN SIZE IS NULL THEN 1 ELSE 0 END.
Wyświetla to co jest w kolumnie SIZE a sortuje po 0 i 1 (tak jak wcześniej pisałem)

0

No ok, sortuje bo kod jest poprawny, ale nadal nie rozumiem dlaczego NULL-e trafiają na koniec tabeli wyników, a nie na początek?

0

A czytasz w ogóle to co piszemy?

0

Oczywiście że czytam.

0

Gdybyś wypróbował zapytanie które podał Ci @abrakadaber widział byś wg. jakich danych jest sortowany wynik i zrozumiał byś, dlaczego NULL'e są na końcu.

0

OK, wypróbowałem. Liczby "0" i "1" nie pojawiają się w żadnych kolumnach tej tabeli, a tym bardziej w tabeli z wynikami. Więc nie wiem jak mogą mieć wpływ na sortowanie.

0

Poczekaj...
Czy ja dobrze rozumiem, że wg. Ciebie po odpaleniu zapytania które podał @abrakadaber w wyniku nie ma kolumny z 0 i 1 ?

Poza tym sortować możesz po kolumnach których nie ma w wyniku zapytania (tak to zrobiłeś na początku).

0

Aaaa, no tak, @abrakadaber teraz zmienił kod swojego przykładu na bardziej zrozumiały, i teraz wszystko jest jasne bez zbędnego tłumaczenia. Trzeba było tak od razu!
Dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1