Sumy częściowe w sql, jak wykonać?

0

Cześć, mam nie lada problem ponieważ chciałbym wykonać takie zapytanie sql które wyświetliło by mi dane pogrupowane i na końcu danej grupy wyświetliło sumę (sumę wyświetla w oddzielnym wierszu).

np.
klient | nr. faktury | towar | cena | ilosc | wartosc |
Pan | 12 | komputer | 1200 | 2 | 2400 |
Pan | 12 | monitor | 560 | 1 | 560 |
Klient | 13 | głośniki | 420 | 2 | 84 |
Klient | 13 | monitor | 650 | 1 | 650 |

całość to kwerenda która pobiera dane z kilku tabel : tabele klienci , tabele faktury i tabele pozycję faktur.

a chciałbym za pomocą zapytania sql wykonać sumy częściowe:
czyli oczekiwany wynik to np. taki:

klient | nr. faktury | towar | cena | ilosc | wartosc |
Pan | 12 | komputer | 1200 | 2 | 2400 |
Pan | 12 | monitor | 560 | 1 | 560 |
| | | | suma| 2960 |
Klient | 13 | głośniki | 420 | 2 | 84 |
Klient | 13 | monitor | 650 | 1 | 650 |
| | | | suma | 2960 |

Ps. szukałem w internecie ale nigdzie nie mogę znaleźć rozwiązań tego tematu. Bo na chwilę obecną wychodzi mi jedynie suma faktur ale to nie o to mi chodzi chcę, żeby rozbijało na poszczególne pozycję faktur a następnie na dole podawało sumę całej faktury.... Proszę o rozwiązanie jak to się robi w sql albo jakich funkcji użyć.

na chwilę obecną zapytanie sql wygląda tak:

select
k.firma as klient, f.nr as nr. faktury, t.nazwatow as towar, t.cena as cena, pzf.ilosc as ilosc , pzf.ilosc*t.cena as wartosc
from
klienci as k
INNER JOIN towary as t ON pzf.towar = t.id
INNER JOIN pozycje_faktur as pzf ON pzf.transakcja = f.id
INNER JOIN faktury as f ON f.odbiorca = k.id

1

w SQLu nie da się tak wyświetlić wyniku (no dobra da się ale to dużo kombinowania i SQL nie do tego jest). Takie rzeczy robi się po stronie tego, co wyświetla wynik zapytania

1

Możesz dać to zapytanie z unią i w drugim zapytaniu zwrócić tylko sumę wartości z tego pierwszego. Dodając do zapytania kolumny techniczne można całość potem odpowiednio posortować tak żeby najpierw był wynik pogrupowany po jakimś ID, potem suma, potem znów wynik, suma itd.

0

Na szybko: możesz dodać w każdym wierszu sumę. Używając funkcji WINDOW. SUM(pzf.ilosc*t.cena) OVER(partition by k.firma, f.nr)

0
  1. Najpierw kwoty do faktury:
    SELECT nr_f, (cena*ilosc) as kwota, reszta_kolum
  2. następnie suma plus kolumny techniczne;
    SELECT sum(kwota), nr_f, null, null, ... from (SELECT nr_f, (cena*ilosc) as kwota, reszta_kolum) group by nr_f
  3. Unia:
select TU_KOLUMNY, null from tabela
union
SELECT sum(kwota), nr_f, null, null, ... from (SELECT nr_f, (cena*ilosc) as kwota, reszta_kolum) group by nr_f

null w pierwszym zapytaniu "udaje" sumę, nulle w drugim są wypełniaczem. Musisz oczywiście zadbać o odpowiednią kolejność kolumn by się to nie popieprzyło na typach.
4. Sortowanie.

0

Wszystko gra i śpiewa. Dzięki Koziołek :-)

0

wystarczy użyć GROUP BY ROLLUP (kolumny) lub GROUP BY CUBE (kolumny)

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