Baze podataka

Ms Sql Računanje razlike

Rookie2010 pet 16.11.2018 12:59

Ne znam pa pitam... U tablici prihoda i rashoda troškova organiziranoj po mjesecima i vrstama troška moram izračunati kumulativni prihod i kumulativni rashod unutar mjeseca. Nov sam u tome, ali netko sigurno zna kako da to napravim. Hvala!

Bobobo-bo Bo-bobo uto 20.11.2018 22:01

Treba ti SELECT OVER clause u obliku drugog upita iz primjera za kumulativni total.

 

SQL Fiddle za MSSQL ne radi ovih dana pa evo code snippeta

 

create table tbl(mjesec int, vrsta char(1), prihod int, rashod int)

insert into tbl(mjesec, vrsta, prihod, rashod)
values (1, 'A', 10000, 20000),
    (1, 'A', 1000, 2000),
    (2, 'A', 100, 200),
    (2, 'B', 10, 20),
    (3, 'C', 1, 2)

select mjesec,
    sum(sum_prihod) over (order by mjesec) as kumulativ_prihod,
    sum(sum_rashod) over (order by mjesec) as kumulativ_rashod
from (
    select mjesec, sum(prihod) as sum_prihod, sum(rashod) as sum_rashod
    from tbl
    group by mjesec
) as kumulativ
order by mjesec

 

Rezultat:

 

mjesec   kumulativ_prihod   kumulativ_rashod
--------------------------------------------
1      11000              22000
2        11110              22220
3        11111         22222

 

Rookie2010 sri 21.11.2018 12:24

Prvo hvala na pomoći. Očito se tu ima još mnogo za učiti. Pokušao sam prilagoditi primjer onom što meni treba ... ali ne ide.
Ovo je par linija naredbi na temelju tvog primjera gdje pitam da se za sada izračuna samo prihod. Napominjem prihod i rashod se pohranjuju u jednoj koloni a na temelju kategorije (u posebnoj koloni) se određuje o kakvoj transakciji je riječ.

select month(Date), sum(Amount) over (order by month(Date))
from (
     select month(Date), sum(Amount) as Prihod
     from Tsve
     group by month(Date)
     )
order by month(Date)

MsSql mi vrača komentar: Incorrect syntax near the keyword 'order'.

Eto to je to. Ako imaš još neku sugestiju bila bi mi od velike pomoći.

Bobobo-bo Bo-bobo čet 22.11.2018 20:47

Tu grešku dobiješ jer derivirana tablica mora imati alias (maknuo si "as kumulativ" iz mojeg posta).

 

To nije jedina greška

    * calculated stupac derivirane tablice month(Date) mora imati ime

    * glavni upit treba koristiti nazive stupaca derivirane, a ne izvorne tablice

 

create table Tsve(Date datetime, Amount int)

insert into Tsve(Date, Amount)
values ('2018-01-01', 10000),
    ('2018-01-01', 1000),
    ('2018-02-01', 100),
    ('2018-02-02', 10),
    ('2018-03-01', 1)

select mjesec, sum(Prihod) over (order by mjesec)
from (
     select month(Date) as mjesec, sum(Amount) as Prihod
     from Tsve
     group by month(Date)
     ) as kumulativ
order by mjesec

Rookie2010 pet 23.11.2018 09:41

Hvala na brzoj pomoći, jednako toliko na poduci. Trenutno se bavim neodgodivim stvarima, ali ću svakako tvoju uputu primjeniti što prije. Zanima me rad sa Ms Sql bazom, ali vidim da tome treba posvetiti još mnogo vremena i učenja.