» »

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:
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
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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

SQL vprašanje

Oddelek: Programiranje
81110 (709) MrStein
»

SQL programiranje

Oddelek: Programiranje
81175 (865) slitkx
»

Baza & c#

Oddelek: Programiranje
214154 (3212) xardas
»

[sql]-stevilka vrstic

Oddelek: Programiranje
121130 (993) bmandl
»

Readrat store in antec

Oddelek: Strojna oprema
7882 (625) Golden eye

Več podobnih tem