Лабораторная работа №8
Выполнил: Дадыкин А.
Группа: А-13-07
Преподаватель: Сидорова Н.П.
Задание 8
Выдать статистику по годам приема и по специальностям учащихся вашего государства. Отчет должен начинаться с заголовка и цифры общего количества записей по запросу. Далее совокупность таблиц, где каждая таблица начинается с заголовка: <год приема> - <цифра>, не равная нулю, а заканчивается перечнем шифров специальностей с цифрами, не равными нулю.
CREATE Procedure lab8_8 AS
DECLARE @gp VARCHAR (2),
@spec VARCHAR (6),
@specCount INT,
@YearCount INT,
@TotalCount INT,
@gp1 VARCHAR (6);
DECLARE y cursor for
SELECT gp, spec, COUNT (*)
FROM ukr
GROUP BY gp, spec
ORDER BY gp
SELECT @YearCount=0
SELECT @TotalCount=0
OPEN y
FETCH y INTO @gp, @spec, @specCount
IF (@@FETCH_STATUS=-2)
BEGIN
PRINT 'Ошибка в FETCH'
CLOSE y
RETURN
END
IF (@@FETCH_STATUS=-1)
BEGIN
PRINT 'Данные не найдены'
CLOSE y
RETURN
END
SELECT @gp1=@gp
PRINT @spec+' -'+str(@specCount)
SELECT @YearCount=@YearCount+@specCount
SELECT @TotalCount=@TotalCount+@specCount
WHILE (@@FETCH_STATUS=0)
BEGIN
FETCH y INTO @gp, @spec, @specCount
IF (@gp1 !=@gp )
BEGIN
PRINT 'Год приема ' + @gp1 + ' - ' +str(@YearCount)
SELECT @gp1=@gp
SELECT @YearCount=0
END
IF (@@FETCH_STATUS=-1)
BREAK
PRINT @spec + ' - ' +str(@specCount)
SELECT @YearCount=@YearCount+@specCount
SELECT @TotalCount=@TotalCount+@specCount
END
CLOSE y
IF (@@FETCH_STATUS=-2)
BEGIN
PRINT 'Ошибка в FETCH'
RETURN
END
PRINT 'Год приема ' + @gp + ' - ' +str(@YearCount)
PRINT '----------------------------------'
PRINT 'Общее количество -'+str(@TotalCount)
DEALLOCATE y
RETURN
Запрос: exec lab8_8
Результат:
Задание 9
Выдать статистику по категориям обучения и учебным заведениям вашего государства. Отчет должен начинаться с заголовка и цифры - общего количества записей по запросу. Далее совокупность таблиц, где каждая таблица начинается с заголовка: <категория обучения> - <цифра>, не равная нулю, а заканчивается перечнем учебных заведений с цифрами, не равными нулю.
create procedure lab8_9 as
declare @kategoria char (16),
@Univer char (25),
@UniverCount int ,
@kategoriaCount int,
@TotalCount int,
@kategoria1 char (16);
declare C cursor for
select kat_obuch.kat_obucheniya, vuz.uch_zavedenie, count (*)
from ukr join vuz on vuz_k=vuz.cod
join kat_obuch on kat_obuch_k=kat_obuch.cod
group by kat_obuch.kat_obucheniya, vuz.uch_zavedenie
order by kat_obuch.kat_obucheniya
set @kategoriaCount=0
set @TotalCount=0
open C
fetch C into @kategoria, @Univer, @UniverCount
if (@@fetch_status=-2)
begin
print 'ошибка в FETCH'
close C
return
end
if (@@fetch_status=-1)
begin
print 'Данных нет'
close C
return
end
set @kategoria1=@kategoria
print @Univer+' - '+str(@UniverCount)
set @kategoriaCount=@kategoriaCount+@UniverCount
set @TotalCount=@TotalCount+@UniverCount
while (@@fetch_status=0)
begin
fetch C into @kategoria, @Univer, @UniverCount
if (@kategoria1 !=@kategoria)
begin
print 'Категория обучения ' + @kategoria1 + ' - ' +str(@kategoriaCount)
select @kategoria1=@kategoria
select @kategoriaCount=0
end
if (@@fetch_status=-1)
break
print @Univer + ' - ' +str(@UniverCount)
set @kategoriaCount=@kategoriaCount+@UniverCount
set @TotalCount=@TotalCount+@UniverCount
end
close C
if (@@fetch_status=-2)
begin
print 'Ошибка в FETCH'
return
end
print 'Категория обучения ' + @kategoria + ' - ' +str(@kategoriaCount)
print '+----------------------------------+'
print 'Всего по запросу-'+str(@TotalCount)
deallocate C
return
Запрос: exec lab8_9
Результат: