· 6 years ago · Dec 05, 2019, 10:42 PM
1alter PROCEDURE PROCEDURA14
2
3@ROK date
4
5AS
6BEGIN
7
8
9 DECLARE @idOsoba int
10 , @imie varchar(20)
11 , @nazwisko varchar(20)
12 , @idPrzedmiot int
13 , @przedmiot varchar(20)
14 , @ostatnieIdOsoba int
15 , @ocena decimal
16 , @count int
17 , @row int
18 , @idprzedmiot2 int
19 CREATE TABLE #TMP
20 (
21 idOsoba int,
22 idPrzedmiot int,
23 Przedmiot varchar(50)
24 )
25
26 set @row = 1
27
28 DECLARE KURSOR CURSOR FOR
29 SELECT o.IdOsoba, o.imie, o.nazwisko, p.idprzedmiot, p.przedmiot, oc.ocena
30 FROM osoba o
31 join student s
32 on o.idosoba = s.idosoba
33 join ocena oc
34 on oc.idStudent = s.IdOsoba
35 join przedmiot p
36 on p.idprzedmiot = oc.idprzedmiot
37 where YEAR(s.DataRekrutacji) = YEAR(@rok)
38 order by o.IdOsoba
39 set @ostatnieidosoba = 0
40
41 OPEN KURSOR
42
43
44 FETCH NEXT FROM KURSOR INTO @idOsoba, @imie, @nazwisko, @idprzedmiot, @przedmiot, @ocena
45 WHILE @@FETCH_STATUS = 0
46 BEGIN
47
48 IF (@ocena <= 2)
49 BEGIN
50 insert into #TMP values (@idOsoba, @idprzedmiot, @przedmiot)
51 END
52 ELSE
53 BEGIN
54 IF(@ostatnieIdOsoba <> @idOsoba) begin
55 WHILE @row < (SELECT MAX(idPRZEDMIOT) FROM PRZEDMIOT)
56 BEGIN
57 SET @idprzedmiot2 = (SELECT idPrzedmiot FROM PRZEDMIOT WHERE idPrzedmiot = @row)
58 SET @row = @row + 1
59 IF NOT EXISTS (SELECT 1 FROM OCENA oc WHERE oc.IdStudent = @idOsoba and oc.IdPrzedmiot = @idprzedmiot2) insert into #TMP SELECT @idOsoba, @idprzedmiot2, (select przedmiot from przedmiot where idprzedmiot = @idprzedmiot2)
60 end
61 END
62 END
63 set @row = 1
64 set @ostatnieidosoba = @idosoba
65 FETCH NEXT FROM KURSOR INTO @idOsoba, @imie, @nazwisko, @idprzedmiot, @przedmiot, @ocena
66 END
67 CLOSE KURSOR
68 DEALLOCATE KURSOR
69 select * from #tmp
70 drop table #TMP
71END