Задание 12
Выдать статистику по специальностям и городам вашего государства. Отчет должен начинаться заголовком и цифрой - общим количеством записей по запросу. Далее совокупность таблиц, где каждая таблица начинается с заголовка: СПЕЦИАЛЬНОСТЬ <шифр> - ВСЕГО <цифра>, не равная нулю, а заканчивается перечнем названий городов с цифрами, не равными нулю.
--Выдать статистику по специальностям и городам вашего государ-ства. Отчет
--должен начинаться заголовком и цифрой - общим количеством записей по запросу.
--Далее совокупность таблиц, где каждая таблица на-чинается с заголовка:
--СПЕЦИАЛЬНОСТЬ <шифр> - ВСЕГО <цифра>, не равная нулю, а заканчивается перечнем
--названий городов с цифрами, не равными нулю.
create procedure lr8_12 as
declare @city_itog int
declare @spec_itog int
declare @summary int
declare @spec_name char(20)
declare @city_name char(16)
declare @spec_temp char(20)
declare statistic cursor for
select spec,nazvanie_goroda, count(*) from arm
join vuz_gorod on vuz_k=cod_vuza
group by spec,nazvanie_goroda
order by spec
--инициализация
select @spec_itog = 0
select @summary = 0
open statistic
--пробный fetch
fetch statistic into @spec_name,@city_name,@city_itog
--проверка статуса
--крах
if (@@fetch_status=-2)
begin
print 'Ошибка при выполнении первого FETCH'
close statistic
return
end
--отсутствие данных
if (@@fetch_status=-1)
begin
print 'Данные не найдены'
close statistic
return
end
--нормальный ход событий
select @spec_itog = @spec_itog+@city_itog
select @summary = @summary + @city_itog
select @spec_temp = @spec_name
print 'По специальности '+@spec_name+' учится '+str(@city_itog)+' человек/а в городе '+@city_name
while(@@FETCH_STATUS=0)
begin
--выборка следующей записи
fetch statistic into @spec_name,@city_name,@city_itog
--если поменялся город,то:
if(@spec_name!=@spec_temp)
begin
print 'По специальности '+@spec_temp+' всего учится '+str(@spec_itog)+'человек/а'
select @spec_temp = @spec_name
select @spec_itog = 0
end
--если закончились данные
if (@@FETCH_STATUS = -1)
begin
break
end
print 'По специальности '+@spec_name+' учится '+str(@city_itog)+' человек/а, в городе '+@city_name
select @spec_itog = @spec_itog+@city_itog
select @summary = @summary+@city_itog
end
close statistic
print 'По специальности '+@spec_name+' всего учится '+str(@spec_itog)+' человек/а'
print '-----------------------------'
print 'Всего по запросу - '+str(@summary)
deallocate statistic
return
Задание 13
Выдать статистику по городам и годам окончания вашего государства. Отчет должен начинаться с заголовка и цифры - общего количества записей по запросу. Далее совокупность таблиц, где каждая таблица начинается с заголовка: ГОРОД <название> - ВСЕГО <цифра>, не равная нулю, а заканчивается перечнем годов окончания с цифрами, не равными нулю.
--Выдать статистику по городам и годам окончания вашего государ¬ства.
--Отчет должен начинаться с заголовка и цифры - общего количества записей
--по запросу. Далее совокупность таблиц, где каждая таблица на-чинается с
--заголовка: ГОРОД <название> - ВСЕГО <цифра>, не равная ну-лю, а заканчивается
--перечнем годов окончания с цифрами, не равными нулю.
create procedure lr8_13 as
declare @year_itog int
declare @city_itog int
declare @summary int
declare @city_name char(20)
declare @year_dig char(6)
declare @city_temp char(20)
declare statistic cursor for
select nazvanie_goroda, gok, count(*) from arm
join vuz_gorod on vuz_k = cod_vuza
group by nazvanie_goroda,gok
order by nazvanie_goroda
--инициализация
select @city_itog = 0
select @summary = 0
open statistic
--пробный fetch
fetch statistic into @city_name,@year_dig,@year_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+@year_itog
select @summary = @summary + @year_itog
select @city_temp = @city_name
print 'В городе '+@city_name+' учится '+str(@year_itog)+' человек/а,поступивших в '+@year_dig
while(@@FETCH_STATUS=0)
begin
--выборка следующей записи
fetch statistic into @city_name,@year_dig,@year_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(@year_itog)+' человек/а,поступивших в '+@year_dig
select @city_itog = @city_itog+@year_itog
select @summary = @summary+@year_itog
end
close statistic
print 'В городе '+@city_name+' всего учится '+str(@city_itog)+' человек/а'
print '-----------------------------'
print 'Всего по запросу - '+str(@summary)
deallocate statistic
return