Задание 2
Выдать статистику по городам и учебным заведениям вашего государства. Отчет должен начинаться соответствующим заголовком. Далее должна следовать совокупность таблиц, каждая из которых включает перечень учебных заведений одного города с цифрами, не равными нулю (последняя строка таблицы представляет собой:ГОРОД<название> - ВСЕГО <цифра>, где <цифра> не равна 0). Заканчивается отчет цифрой - общим количеством записей по запросу.
--Выдать статистику по городам и учебным заведениям вашего государства.
--Отчет должен начинаться соответствующим заголовком.
--Далее должна следовать совокупность таблиц, каждая из которых включает пе¬речень
--учебных заведений одного города с цифрами, не равными нулю
--(последняя строка таблицы представляет собой:ГОРОД <название> - ВСЕГО <цифра>,
-- где <цифра> не равна 0). Заканчивается отчет цифрой
-- - общим коли¬чеством записей по запросу.
create procedure lr8_2 as
declare @city_name char(20)
declare @city_temp char(20)
declare @vuz_name char(25)
declare @vuz_itog int
declare @city_itog int
declare @summary int
--объявление
declare statistic cursor for
select nazvanie_goroda,nazvanie_vuza,count(*)
from arm
join vuz_gorod on vuz_k = cod_vuza
group by nazvanie_goroda,nazvanie_vuza
--инициализация
select @city_itog = 0
select @summary = 0
open statistic
--первый fetch
fetch statistic into @city_name,@vuz_name,@vuz_itog
--крах
if(@@FETCH_STATUS = -2)
begin
close statistic
return
end
--не найдено ничего
if(@@FETCH_STATUS = -1)
begin
close statistic
return
end
--нормальный ход событий
select @city_itog = @city_itog+@vuz_itog
select @summary = @summary+@vuz_itog
select @city_temp = @city_name
print 'В учебном заведении '+@vuz_name+' города '+@city_name+' обучается '+str(@vuz_itog)+' человек/a'
--обход результата
while(@@FETCH_STATUS=0)
begin
--выборка
fetch statistic into @city_name,@vuz_name,@vuz_itog
--смена города
if(@city_name!=@city_temp)
begin
print 'В городе '+@city_temp+' учится '+str(@city_itog)+ ' человек'
select @city_name = @city_temp
select @city_itog = 0
end
if (@@FETCH_STATUS = -1) break
print 'В учебном заведении '+@vuz_name+' города '+@city_name+' обучается '+str(@vuz_itog)+' человек/a'
select @city_itog = @city_itog + @vuz_itog
select @summary = @summary + @vuz_itog
end
close statistic
print 'В городе '+@city_temp+' учится '+str(@city_itog)+ ' человек'
print '------------------'
print 'Всего по запросу - '+str(@summary)
deallocate statistic
return
Задание 3
Выдать статистику по городам и категориям обучения вашего государства. Отчет должен начинаться с заголовка и цифры - общего количества записей по запросу. Далее совокупность таблиц, где каждая таблица начинается с заголовка: ГОРОД <название> - ВСЕГО <цифра>, где <цифра> ^= 0, а заканчивается перечнем категорий обучения с цифрами, не равными нулю.
create procedure lr8_3 as
declare @kat_itog int
declare @city_itog int
declare @summary int
declare @city_name char(20)
declare @kat_name char(16)
declare @city_temp char(20)
declare statistic cursor for
select nazvanie_goroda, kat_obucheniya, count(*) from arm
join kat_obuch on kat_obuch_k = cod
join vuz_gorod on vuz_k=cod_vuza
group by nazvanie_goroda,kat_obucheniya
--инициализация
select @city_itog = 0
select @summary = 0
open statistic
--пробный fetch
fetch statistic into @city_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 @city_itog = @city_itog+@kat_itog
select @summary = @summary + @kat_itog
select @city_temp = @city_name
print 'В городе '+@city_name+' учится '+str(@kat_itog)+' человек/а с категорией '+@kat_name
while(@@FETCH_STATUS=0)
begin
--выборка следующей записи
fetch statistic into @city_name,@kat_name,@kat_itog
--если поменялся город,то:
if(@city_name!=@city_temp)
begin
print 'В городе '+@city_name+' всего учится '+str(@city_itog)+'человек/а'
select @city_temp = @city_name
select @city_itog = 0
end
--если закончились данные
if (@@FETCH_STATUS = -1)
begin
break
end
print 'В городе '+@city_name+' учится '+str(@kat_itog)+' человек/а с категорией '+@kat_name
select @city_itog = @city_itog+@kat_itog
select @summary = @summary+@kat_itog
end
close statistic
print 'В городе '+@city_name+' всего учится '+str(@city_itog)+' человек/а'
print '-----------------------------'
print 'Всего по запросу - '+str(@summary)
deallocate statistic
return