Forum » Programiranje » t-sql, vsota naročil
t-sql, vsota naročil
bmandl ::
Lep pozdrav.
V šoli imam za rešit en t-sql problem. Napol sem ga že, naprej pa bi potreboval vašo pomoč. In sicer:
Uporabljam sample Northwind bazo od Microsofta in želim sešteti zneske vseh naročil za določenega zaposlenega iz tabele Orders in to izpisati s 'print' samo enkrat. Se pravi, rezultat mora biti nekako tako:
'EmployeeID' : VsotaZneskov
s tem, da se za istega zaposlenega (EmployeeID) izpis ne sme ponoviti, kar pa se meni dogaja in ne znam tega za enkrat preprečiti..dodati bi moral nek IF stavek ali WHILE zanko, da preverja, če se je EmployeeID že spremenil in če se je, izpiše vsoto za prvega, nato pa naprej. Ampak kako to izvesti znotraj kurzorja?
Moj query:
Zaenkrat dobim tak rezultat:
PS.: Naj vas tisto Sodo in liho ne zmoti, to je le dodaten problem k nalogi, ki sem ga moral rešiti.
V šoli imam za rešit en t-sql problem. Napol sem ga že, naprej pa bi potreboval vašo pomoč. In sicer:
Uporabljam sample Northwind bazo od Microsofta in želim sešteti zneske vseh naročil za določenega zaposlenega iz tabele Orders in to izpisati s 'print' samo enkrat. Se pravi, rezultat mora biti nekako tako:
'EmployeeID' : VsotaZneskov
s tem, da se za istega zaposlenega (EmployeeID) izpis ne sme ponoviti, kar pa se meni dogaja in ne znam tega za enkrat preprečiti..dodati bi moral nek IF stavek ali WHILE zanko, da preverja, če se je EmployeeID že spremenil in če se je, izpiše vsoto za prvega, nato pa naprej. Ampak kako to izvesti znotraj kurzorja?
Moj query:
DECLARE @StNarocila int, @zaposleni int, @vsota float, @st int, @status char(4) SET @vsota = 0 DECLARE kurzor CURSOR FOR SELECT ZapSt,EmployeeID,OrderID FROM Orders OPEN kurzor FETCH NEXT FROM kurzor INTO @status,@zaposleni,@StNarocila WHILE(@@FETCH_STATUS = 0) BEGIN IF((SELECT ZapSt FROM Orders WHERE @StNarocila = OrderID) % 2 = 0) SET @status = 'sodo' ELSE SET @status = 'liho' UPDATE Orders SET SodoLiho = @status WHERE @StNarocila = OrderID SET @vsota = @vsota + (SELECT SUM(Freight) FROM Orders WHERE @zaposleni = EmployeeID) print ltrim(str(@zaposleni)) + ':' print @vsota SET @vsota = 0 FETCH NEXT FROM kurzor INTO @status,@zaposleni,@StNarocila END CLOSE kurzor DEALLOCATE kurzor
Zaenkrat dobim tak rezultat:
5:
3918.71
6:
3780.47
4:
11346.1
3:
10884.7
4:
11346.1
3:
10884.7
5:
3918.71
9:
3326.26
3:
10884.7
4:
11346.1
1:
8836.64
4:
11346.1
4:
11346.1
4:
11346.1
8:
7487.88
9:
3326.26
6:
3780.47
2:
8696.41
3:
10884.7
4:
11346.1
8:
7487.88
5:
3918.71
1:
8836.64
itd, itd, itd. Pač to se ponavlja, dokler ne pride do konca tabele Orders.
PS.: Naj vas tisto Sodo in liho ne zmoti, to je le dodaten problem k nalogi, ki sem ga moral rešiti.
- spremenil: bmandl ()
fr0sty ::
Tole je sicer bolj na hitro tako, da nisem 100%, da nisem česa spregledal.
Glede na to, da sem malce utrujen upam, da je to sploh to kar iščeš. ;).
lp
Glede na to, da sem malce utrujen upam, da je to sploh to kar iščeš. ;).
lp
use Northwind; SELECT e.FirstName ,e.LastName, SUM(o.freight) as Vsota FROM orders o inner join employees e on e.EmployeeID = o.EmployeeID GROUP BY o.EmployeeID,e.FirstName ,e.LastName ORDER BY Vsota asc
bmandl ::
Prvič vidim to- e.FirstName.. e pomeni tabela Employees oz. relacija na njo? Jaz bi za začetek želel rezultate izpisati s print ukazom. Zato se mi je tudi pojavil problem. Navodilo pa je tudi bilo, s print..
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | SQL vprašanjeOddelek: Programiranje | 1118 (717) | MrStein |
» | SQL programiranjeOddelek: Programiranje | 1192 (882) | slitkx |
» | Baza & c#Oddelek: Programiranje | 4173 (3231) | xardas |
» | [sql]-stevilka vrsticOddelek: Programiranje | 1141 (1004) | bmandl |
» | Readrat store in antecOddelek: Strojna oprema | 885 (628) | Golden eye |