Задание 4
Выдать статистику по всем учебным заведениям и категориям обучения вашего государства. Отчет должен начинаться с заголовка и цифры - общего количества записей по запросу. Далее совокупность таблиц, где каждая таблица начинается с заголовка: <название учебного заведения> - <цифра>, не равная нулю, а заканчивается перечнем категорий обучения с цифрами, не равными нулю.
--Выдать статистику по всем учебным заведениям и категориям обу¬чения
--вашего государства. Отчет должен начинаться с заголовка и циф¬ры -
--общего количества записей по запросу. Далее совокупность таблиц, где каждая
--таблица начинается с заголовка: <название учебного заведе¬ния> - <цифра>,
--не равная нулю, а заканчивается перечнем категорий обучения с цифрами,
--не равными нулю.
create procedure lr8_4 as
declare @kat_itog int
declare @vuz_itog int
declare @summary int
declare @vuz_name char(20)
declare @kat_name char(16)
declare @vuz_temp char(20)
declare statistic cursor for
select nazvanie_vuza, kat_obucheniya, count(*) from arm
join kat_obuch on kat_obuch_k = cod
join vuz_gorod on vuz_k=cod_vuza
group by nazvanie_vuza,kat_obucheniya
order by nazvanie_vuza
--инициализация
select @vuz_itog = 0
select @summary = 0
open statistic
--пробный fetch
fetch statistic into @vuz_name,@kat_name,@kat_itog
--проверка статуса
--крах
if (@@fetch_status=-2)
begin
print 'Ошибка при выполнении первого FETCH'
close statistic
return
end
--отсутствие данных
if (@@fetch_status=-1)
begin
print 'Данные не найдены'
close statistic
return
end
--нормальный ход событий
select @vuz_itog = @vuz_itog+@kat_itog
select @summary = @summary + @kat_itog
select @vuz_temp = @vuz_name
print 'В вузе '+@vuz_name+' учится '+str(@kat_itog)+' человек/а с категорией '+@kat_name
while(@@FETCH_STATUS=0)
begin
--выборка следующей записи
fetch statistic into @vuz_name,@kat_name,@kat_itog
--если поменялся город,то:
if(@vuz_name!=@vuz_temp)
begin
print 'В вузе '+@vuz_temp+' всего учится '+str(@vuz_itog)+'человек/а'
select @vuz_temp = @vuz_name
select @vuz_itog = 0
end
--если закончились данные
if (@@FETCH_STATUS = -1)
begin
break
end
print 'В вузе '+@vuz_name+' учится '+str(@kat_itog)+' человек/а с категорией '+@kat_name
select @vuz_itog = @vuz_itog+@kat_itog
select @summary = @summary+@kat_itog
end
close statistic
print 'В вузе '+@vuz_name+' всего учится '+str(@vuz_itog)+' человек/а'
print '-----------------------------'
print 'Всего по запросу - '+str(@summary)
deallocate statistic
return
Задание 5
Выдать статистику по учебным заведениям и категориям обучения вашего государства, включая цифры по выпуску 1993 года и по приему 1990 года по каждой категории обучения. Отчет должен начинаться с заголовка и цифры - общего количества записей по запросу. Далее совокупность таблиц, где каждая таблица начинается с заголовка :<название учебного заведения> - <цифра>, не равная нулю, а заканчивается перечнем категорий обучения с тремя цифрами: 1) всего (не равная нулю); 2) выпуск 1993 г.; 3) прием 1990 г.
--Выдать статистику по учебным заведениям и категориям обучения вашего
--государства, включая цифры по выпуску 1993 года и по приему 1990 года
--по каждой категории обучения. Отчет должен начинаться с за¬головка и цифры -
--общего количества записей по запросу. Далее сово¬купность таблиц, где
--каждая таблица начинается с заголовка : <название учебного заведения>
--- <цифра>, не равная нулю, а заканчива¬ется перечнем категорий обучения
--с тремя цифрами: 1) всего (не равная нулю); 2) выпуск 1993 г.; 3) прием 1990 г.
create procedure lr8_5 as
declare @kat_itog int
declare @kat_itogv93 int
declare @kat_itogp90 int
declare @vuz_itog int
declare @vuz_itogv93 int
declare @vuz_itogp90 int
declare @summary int
declare @vuz_name char(20)
declare @kat_name char(16)
declare @vuz_temp char(20)
declare statistic cursor for
select nazvanie_vuza, kat_obucheniya, count(*), sum(CASE gok WHEN '93' THEN 1 ELSE 0 END), sum(CASE gp WHEN '90' THEN 1 ELSE 0 END) from arm
join kat_obuch on kat_obuch_k = cod
join vuz_gorod on vuz_k=cod_vuza
group by nazvanie_vuza,kat_obucheniya
order by nazvanie_vuza
--инициализация
select @vuz_itog = 0
select @vuz_itogv93 = 0
select @vuz_itogp90 = 0
select @summary = 0
open statistic
--пробный fetch
fetch statistic into @vuz_name,@kat_name,@kat_itog,@kat_itogv93,@kat_itogp90
--проверка статуса
--крах
if (@@fetch_status=-2)
begin
print 'Ошибка при выполнении первого FETCH'
close statistic
return
end
--отсутствие данных
if (@@fetch_status=-1)
begin
print 'Данные не найдены'
close statistic
return
end
--нормальный ход событий
select @vuz_itog = @vuz_itog+@kat_itog
select @vuz_itogv93 = @vuz_itogv93+@kat_itogv93
select @vuz_itogp90 = @vuz_itogp90+@kat_itogp90
select @summary = @summary + @kat_itog
select @vuz_temp = @vuz_name
print 'В вузе '+@vuz_name+' учится '+str(@kat_itog)+' человек/а с категорией '+@kat_name + ' из них в 93 выпустилось '+ str(@kat_itogv93)+', поступило в 90'+str(@kat_itogp90)
while(@@FETCH_STATUS=0)
begin
--выборка следующей записи
fetch statistic into @vuz_name,@kat_name,@kat_itog,@kat_itogv93,@kat_itogp90
--если поменялся город,то:
if(@vuz_name!=@vuz_temp)
begin
print 'В вузе '+@vuz_temp+' всего учится '+str(@vuz_itog)+'человек/а, из них выпустилось в 93 '+str(@vuz_itogv93)+', поступило в 90'+str(@vuz_itogp90)
select @vuz_temp = @vuz_name
select @vuz_itog = 0
select @vuz_itogp90 = 0
select @vuz_itogv93 = 0
end
--если закончились данные
if (@@FETCH_STATUS = -1)
begin
break
end
print 'В вузе '+@vuz_name+' учится '+str(@kat_itog)+' человек/а с категорией '+@kat_name + ' из них в 93 выпустилось '+ str(@kat_itogv93)+', поступило в 90'+str(@kat_itogp90)
select @vuz_itog = @vuz_itog+@kat_itog
select @vuz_itogv93 = @vuz_itogv93+@kat_itogv93
select @vuz_itogp90 = @vuz_itogp90+@kat_itogp90
select @summary = @summary+@kat_itog
end
close statistic
print 'В вузе '+@vuz_name+' всего учится '+str(@vuz_itog)+'человек/а, из них выпустилось в 93 '+str(@vuz_itogv93)+', поступило в 90'+str(@vuz_itogp90)
print '-----------------------------'
print 'Всего по запросу - '+str(@summary)
deallocate statistic
return