Лабораторная работа №8
Выполнили: Авдиенков О.А.
Шутова Е.С.
Группа: А-13-07
Преподаватель: Сидорова Н. П.
Задание 8
Выдать статистику по годам приема и по специальностям учащихся вашего государства. Отчет должен начинаться с заголовка и цифры общего количества записей по запросу. Далее совокупность таблиц, где каждая таблица начинается с заголовка: <год приема> - <цифра>, не равная нулю, а заканчивается перечнем шифров специальностей с цифрами, не равными нулю.
CREATE Procedure Proc8_8 AS
BEGIN
DECLARE @EnteranceYear VARCHAR (2)
DECLARE @Speciality VARCHAR (6)
DECLARE @SpecialityCount INT
DECLARE @YearCount INT
DECLARE @TotalCount INT
DECLARE @EnteranceYear1 VARCHAR (6)
DECLARE y cursor for
SELECT gp, spec, COUNT (*)
FROM bel
GROUP BY gp, spec
ORDER BY gp
SELECT @YearCount=0
SELECT @TotalCount=0
OPEN y
FETCH y INTO @EnteranceYear, @Speciality, @SpecialityCount
IF (@@FETCH_STATUS=-2)
BEGIN
PRINT 'Ошибка в FETCH'
CLOSE y
RETURN
END
IF (@@FETCH_STATUS=-1)
BEGIN
PRINT 'Данные не найдены'
CLOSE y
RETURN
END
SELECT @EnteranceYear1=@EnteranceYear
PRINT @Speciality+' -'+str(@SpecialityCount)
SELECT @YearCount=@YearCount+@SpecialityCount
SELECT @TotalCount=@TotalCount+@SpecialityCount
WHILE (@@FETCH_STATUS=0)
BEGIN
FETCH y INTo @EnteranceYear, @Speciality, @SpecialityCount
IF (@EnteranceYear1 !=@EnteranceYear)
BEGIN
PRINT 'Год приема ' + @EnteranceYear1 + ' - ' +str(@YearCount)
SELECT @EnteranceYear1=@EnteranceYear
SELECT @YearCount=0
END
IF (@@FETCH_STATUS=-1)
BREAK
PRINT @Speciality + ' - ' +str(@SpecialityCount)
SELECT @YearCount=@YearCount+@SpecialityCount
SELECT @TotalCount=@TotalCount+@SpecialityCount
END
CLOSE y
IF (@@FETCH_STATUS=-2)
BEGIN
PRINT 'Ошибка в FETCH'
RETURN
END
PRINT 'Год приема ' + @EnteranceYear + ' - ' +str(@YearCount)
PRINT '----------------------------------'
PRINT 'Общее количество -'+str(@TotalCount)
DEALLOCATE y
RETURN
END
Задание 9
Выдать статистику по категориям обучения и учебным заведениям вашего государства. Отчет должен начинаться с заголовка и цифры - общего количества записей по запросу. Далее совокупность таблиц, где каждая таблица начинается с заголовка: <категория обучения> - <цифра>, не равная нулю, а заканчивается перечнем учебных заведений с цифрами, не равными нулю.
alter procedure Proc8_9 as
begin
declare @StudyType char (16)
declare @University char (25)
declare @UniverCount int
declare @StudyTypeCount int
declare @TotalCount int
declare @StudyType1 char (16)
declare y cursor for
select kat_obuch.kat_obucheniya, vuz.uch_zavedenie, count (*)
from bel 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 @StudyTypeCount=0
set @TotalCount=0
open y
fetch y into @StudyType, @University, @UniverCount
if (@@fetch_status=-2)
begin
print 'ошибка в FETCH'
close y
return
end
if (@@fetch_status=-1)
begin
print 'Данных нет'
close y
return
end
set @StudyType1=@StudyType
print @University+' - '+str(@UniverCount)
set @StudyTypeCount=@StudyTypeCount+@UniverCount
set @TotalCount=@TotalCount+@UniverCount
while (@@fetch_status=0)
begin
fetch y into @StudyType, @University, @UniverCount
if (@StudyType1 !=@StudyType)
begin
print 'Категория обучения ' + @StudyType1 + ' - ' +str(@StudyTypeCount)
select @StudyType1=@StudyType
select @StudyTypeCount=0
end
if (@@fetch_status=-1)
break
print @University + ' - ' +str(@UniverCount)
set @StudyTypeCount=@StudyTypeCount+@UniverCount
set @TotalCount=@TotalCount+@UniverCount
end
close y
if (@@fetch_status=-2)
begin
print 'Ошибка в FETCH'
return
end
print 'Категория обучения ' + @StudyType + ' - ' +str(@StudyTypeCount)
print '+----------------------------------+'
print 'Всего по запросу-'+str(@TotalCount)
deallocate y
return
end