Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ORDER BY
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
MikroUser
Witam.

Tabelka:
  1. ID | Name
  2. 0 | Andrzej
  3. 1 | Edward
  4. 2 | Warszawa
  5. 3 | Paweł
  6. 4 | Asia
  7. 5 | Kraków


Chcę aby posortować tabelkę względem Name ale tak żeby wszystko co się zaczyna na 'P' było na końcu:

  1. SELECT * FROM TABLE WHERE NAME NOT LIKE 'P%' ORDER BY NAME

Wynik jest:
0 | Andrzej
4 | Asia
1 | Edward
5 | Kraków
2 | Warszawa

Jak dołączyć wiersz 3|Paweł. Chcę aby był na końcu posortowanej tabeli. Jak to zrobić ? Interesuje mnie select dla pgSQL.

Dziękuję za odpowiedzi.
dr_bonzo
Dodaj UNION z podobnym zapytaniem, tylko tym razem wybierz tylko rekordy zaczynajace sie na 'P'.
MikroUser
Wykorzystałem
http://www.postgresql.org/docs/7.3/interac...union-case.html

ale niestety to nie pomogło.

  1. SELECT * FROM tTabela WHERE ID = 21 AND Name != 'Inne'
  2. UNION SELECT * FROM tTabela WHERE ID = 21 AND "Name" = 'Inne'


Wykonanie zapytania zwraca:

Andrzej
Asia
Artek
Inne
Kraków
...

Chcę żeby zapytanie zwróciło posortowane wyniki bez 'Inne' a 'Inne' było na końcu.

Proszę o pomoc.
KILIUSZKIN
Moja podpowiedź to:

Spróbuj zamiast UNION użyć UNION ALL (powinno pomóc wystarczająco) , a jak to nie pomoże, to
dodatkowo w zapytaniach dodaj (jako pierwszą) kolumnę i wstaw tam wartość 1 w pierwszym zapytaniu, a
w drugim zapytaniu wartość 2 i wtedy na pewno posortuje Ci tam jak chcesz.
Skobi
zapytanie powinno wygladac tak:

  1. SELECT
  2. ID, Name,
  3. case when substr(lower(Name),1,1) = 'p' then 1
  4. else 0
  5. end AS sort
  6. FROM TABLE ORDER BY sort ASC, Name ASC
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.