1

Temat: Numerowanie wierszy w zapytaniu SELECT

Witam serdecznie.

Czy istnieje funkcja pozwalająca wygenerować liczbę porządkową w zapytaniu SELECT. Kolumna Lp nie ma być powiązana z jakimikolwiek danymi w bazie danych. Ma być generowana wyłącznie na potrzeby konkretnego zapytania.

Przekopałem Googla, ale albo słabo szukałem, albo faktycznie nie ma rozwiązania mojego problemu.

Pozdrawiam.
Tomasz Konopiński

2

Odp: Numerowanie wierszy w zapytaniu SELECT

nie mozesz sobie zdefiniowac licznik i uzyc go?

3

Odp: Numerowanie wierszy w zapytaniu SELECT

W międzyczasie doszedłem do tego, ale ten licznik podlega sortowaniu i dostaję zamiast 1,2,3,4 -> 1,3,4,2

4

Odp: Numerowanie wierszy w zapytaniu SELECT

pokaz tego selecta

5

Odp: Numerowanie wierszy w zapytaniu SELECT

Ups. Spróbowałem ponownie wykonać to zapytanie i wyszło poprawnie. Chyba gdzieś po drodze błąd popełniłem. W takim razie pozostaje mi tylko znalezienie sposobu na każdorazowe zerowanie licznika.

create sequence lp start 1;
select nextval('lp') as "L.p.", grupypojazdowb.id as "Rodzaj silnika spalinowego",
rodzajpaliwa.nazwa as "Rodzaj paliwa",
sum(pozycjefaktury.ilosc* rodzajpaliwa.gestosc/1000) as "Zużycie paliw [Mg]",
stawkaoplaty.stawka as "Jednostkowa stawka opłaty [zł/Mg]",
stawkaoplaty.stawka * sum(pozycjefaktury.ilosc* rodzajpaliwa.gestosc/1000) as "Wysokość opłaty"
from pozycjefaktury, rodzajpaliwa, samochod, grupypojazdowb, stawkaoplaty
where pozycjefaktury.rodzajpaliwa = rodzajpaliwa.id
and pozycjefaktury.samochod = samochod.nrrej
and samochod.grupypojazdowb = grupypojazdowb.id
and stawkaoplaty.grupypojazdowb = grupypojazdowb.id
and stawkaoplaty.rodzajpaliwa = rodzajpaliwa.id
group by grupypojazdowb.id, grupypojazdowb.opis, rodzajpaliwa.nazwa, stawkaoplaty.stawka
order by grupypojazdowb.id, rodzajpaliwa.nazwa;

Wynik:

L.p. | Rodzaj silnika spalinowego |      Rodzaj paliwa      |   Zużycie paliw [Mg]   | Jednostkowa stawka opłaty [zł/Mg] | Wysokość opłaty 
------+----------------------------+-------------------------+------------------------+-----------------------------------+-----------------
    1 |                          4 | Benzyna silnikowa       | 1.22599036650000000000 |                             14.43 | 17.691040988595
    2 |                          4 | Gaz płynny propan-butan | 0.43265350000000000000 |                             18.75 |     8.112253125
    3 |                          4 | Olej napędowy           | 1.20558480000000000000 |                              9.94 |    11.983512912
    4 |                          8 | Olej napędowy           | 8.38740000000000000000 |                             40.41 |      338.934834
(4 rows)

Pozdrawiam
Tomasz Konopiński

6

Odp: Numerowanie wierszy w zapytaniu SELECT

moze lepiej zdefiniowac funkcje plpgsql wykonujaca takiego selecta, mozesz w niej uzyc petli i licznik nie bedzie potrzebny. Kiedys robilem takie numerowanie korzystajac z funkcji generate_series(), ale teraz juz niestety nie pamietam jak to zrobilem smile.

7

Odp: Numerowanie wierszy w zapytaniu SELECT

Na funkcje przyjdzie czas... Na razie to było pytanie akademickie z cyklu "jest łatwe ale nie mam punktu zaczepienia". Teraz mam termin do połowy lipca żeby zrobić sprawozdanie do urzędów no i oczywiście muszę wprowadzić prawdziwe dane i przepisać na urzędowy formularz. Tymczasem dziękuję, jak wymyślę jak to zrobić w inny sposób to nie omieszkam napisać na forum.

Pozdrawiam
Tomasz Konopiński