Задание 10
Выдать статистику по выпуску 1993 года вашего государства по всем учебным заведениям и специальностям. Отчет должен начинаться с заголовка и цифры - общего количества записей по запросу (выпуску 1993 г.). Далее перечень таблиц, где каждая таблица начинается с заголовка: <название учебного заведения> - <цифра>, не равная нулю, а заканчивается перечнем шифров специальностей с цифрами, не равными нулю.
create procedure lab8_10 (@SelectYear VARCHAR(4)) as
declare @Univer char (25),
@spec char (6),
@SpecCount int,
@UniverCount int,
@TotalCount int,
@Univer1 char (25);
declare cur cursor for
select vuz.uch_zavedenie, spec, count (*)
from ukr join vuz on vuz_k=vuz.cod
where gok=@SelectYear
group by vuz.uch_zavedenie, spec
order by vuz.uch_zavedenie
set @UniverCount=0
set @TotalCount=0
open cur
fetch cur into @Univer, @spec, @SpecCount
if (@@fetch_status=-2)
begin
print 'Ошибка в FETCH'
close cur
return
end
if (@@fetch_status=-1)
begin
print 'Данные не найдены'
close cur
return
end
set @Univer1=@Univer
print @spec+' -- '+str(@SpecCount)
set @UniverCount=@UniverCount+@SpecCount
set @TotalCount=@TotalCount+@SpecCount
while (@@fetch_status=0)
begin
fetch cur into @Univer, @spec, @SpecCount
if (@Univer1 !=@Univer)
begin
print 'Учебное заведение ' + @Univer1 + ' -- ' +str(@UniverCount)
set @Univer1=@Univer
set @UniverCount=0
end
if (@@fetch_status=-1)
break
print @spec + ' -- ' +str(@SpecCount)
select @UniverCount=@UniverCount+@SpecCount
select @TotalCount=@TotalCount+@SpecCount
end
close cur
if (@@fetch_status=-2)
begin
print 'Ошибка FETCH'
return
end
print 'Учебное заведение ' + @Univer + ' -- ' +str(@UniverCount)
print '----------------------------------'
print 'Общее количество --'+str(@TotalCount)
deallocate cur
return
Задание 11
Выдать статистику по приему 1991 года вашего государства по всем категориям обучения и городам. Отчет должен начинаться с заголовка и цифры - общего количества записей по запросу (по приему 91-го года). Далее совокупность таблиц, где каждая таблица начинается с заголовка: <название категории обучения> - <цифра>, не равная нулю, а заканчивается перечнем названий городов с цифрами, не равными нулю.
create procedure lab8_11 (@EnterYear VARCHAR(4)) as
declare @Kategoria char (16),
@City char (20),
@CityCount int,
@TypeCount int,
@TotalCount int,
@Kategoria1 char (16);
declare cur cursor for
select kat_obuch.kat_obucheniya, vuz_gorod.nazvanie_goroda, count (*)
from ukr
join vuz_gorod on vuz_k=vuz_gorod.cod_vuza
join kat_obuch on kat_obuch_k=kat_obuch.cod
where gp=@EnterYear
group by kat_obuch.kat_obucheniya, vuz_gorod.nazvanie_goroda
order by kat_obuch.kat_obucheniya
select @TypeCount=0
select @TotalCount=0
open cur
fetch cur into @Kategoria, @City, @CityCount
if (@@fetch_status=-2)
begin
print 'Ошибка в FETCH'
close cur
return
end
if (@@fetch_status=-1)
begin
print 'Данные не найдены'
close cur
return
end
select @Kategoria1=@Kategoria
print @City+' - '+str(@CityCount)
select @TypeCount=@TypeCount+@CityCount
select @TotalCount=@TotalCount+@CityCount
while (@@fetch_status=0)
begin
fetch cur into @Kategoria, @City, @CityCount
if (@Kategoria1 !=@Kategoria)
begin
print 'Категория обучения ' + @Kategoria1 + ' - ' +str(@TypeCount)
select @Kategoria1=@Kategoria
select @TypeCount=0
end
if (@@fetch_status=-1)
break
print @City + ' - ' +str(@CityCount)
select @TypeCount=@TypeCount+@CityCount
select @TotalCount=@TotalCount+@CityCount
end
close cur
if (@@fetch_status=-2)
begin
print 'Ошибка в FETCH'
return
end
print 'Категория обучения ' + @Kategoria + ' - ' +str(@TypeCount)
print '----------------------------------'
print 'Всего по запросу - '+str(@TotalCount)
deallocate cur
return
Запрос: exec lab8_11 @EnterYear='91'
Результат: