Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы (2011) / Бочаров, Кобец / Лабораторная работа 8.docx
Скачиваний:
60
Добавлен:
28.06.2014
Размер:
1.49 Mб
Скачать

Задание 14

Выдать статистику по лицам мужского пола вашего государства по всем городам и учебным заведениям. Отчет должен начинаться соот­ветствующим заголовком. Далее должна следовать совокупность таблиц, каждая из которых включает перечень учебных заведений одного города с цифрами, не равными нулю (последняя строка таблицы представляет со­бой: ГОРОД <название> - ВСЕГО <цифра>, где <цифра> ^= 0). Заканчива­ется отчет цифрой - общим количеством записей по запросу (т. е. всего мужчин).

--Выдать статистику по городам и годам окончания вашего государ¬ства.

--Отчет должен начинаться с заголовка и цифры - общего количества записей

--по запросу. Далее совокупность таблиц, где каждая таблица на-чинается с

--заголовка: ГОРОД <название> - ВСЕГО <цифра>, не равная ну-лю, а заканчивается

--перечнем годов окончания с цифрами, не равными нулю.

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

Задание 15

Выдать статистику по специальностям и учебным заведениям ваше­го государства. Отчет должен начинаться с заголовка и цифры - общего количества записей по запросу. Далее совокупность таблиц, где каждая таблица начинается с заголовка: СПЕЦИАЛЬНОСТЬ <шифр> - ВСЕГО <цифра>, не равная нулю, а заканчивается перечнем названий учебных заведений с цифрами, не равными нулю.

create procedure lr8_15 as

declare @vuz_itog int

declare @spec_itog int

declare @summary int

declare @spec_name char(20)

declare @vuz_name char(16)

declare @spec_temp char(20)

declare statistic cursor for

select spec,nazvanie_vuza, count(*) from arm

join vuz_gorod on vuz_k=cod_vuza

group by spec,nazvanie_vuza

order by spec

--инициализация

select @spec_itog = 0

select @summary = 0

open statistic

--пробный fetch

fetch statistic into @spec_name,@vuz_name,@vuz_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+@vuz_itog

select @summary = @summary + @vuz_itog

select @spec_temp = @spec_name

print 'По специальности '+@spec_name+' учится '+str(@vuz_itog)+' человек/а в вузе '+@vuz_name

while(@@FETCH_STATUS=0)

begin

--выборка следующей записи

fetch statistic into @spec_name,@vuz_name,@vuz_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(@vuz_itog)+' человек/а, в вузе '+@vuz_name

select @spec_itog = @spec_itog+@vuz_itog

select @summary = @summary+@vuz_itog

end

close statistic

print 'По специальности '+@spec_name+' всего учится '+str(@spec_itog)+' человек/а'

print '-----------------------------'

print 'Всего по запросу - '+str(@summary)

deallocate statistic

return