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

Задание 8

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

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

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

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

--начинается с заголовка: <год приема> - <цифра>, не равная нулю, а

--заканчивается перечнем шифров специальностей с цифра-ми, не равными нулю.

create procedure lr8_8 as

declare @spec_itog int

declare @y_itog int

declare @summary int

declare @year_d char(20)

declare @spec_name char(16)

declare @year_temp char(20)

declare statistic cursor for

select spec, gp, count(*) from arm

group by gp,spec

order by gp

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

select @y_itog = 0

select @summary = 0

open statistic

--пробный fetch

fetch statistic into @year_d,@spec_name,@spec_itog

--проверка статуса

--крах

if (@@fetch_status=-2)

begin

print 'Ошибка при выполнении первого FETCH'

close statistic

return

end

--отсутствие данных

if (@@fetch_status=-1)

begin

print 'Данные не найдены'

close statistic

return

end

--нормальный ход событий

select @y_itog = @y_itog+@spec_itog

select @summary = @summary + @spec_itog

select @year_temp = @year_d

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

while(@@FETCH_STATUS=0)

begin

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

fetch statistic into @year_d,@spec_name,@spec_itog

--если поменялся город,то:

if(@year_d!=@year_temp)

begin

print 'В году '+@year_temp+' всего принято '+str(@y_itog)+'человек/а'

select @year_temp = @year_d

select @y_itog = 0

end

--если закончились данные

if (@@FETCH_STATUS = -1)

begin

break

end

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

select @y_itog = @y_itog+@spec_itog

select @summary = @summary+@spec_itog

end

close statistic

print 'В году '+@year_d+' всего принято '+str(@y_itog)+' человек/а'

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

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

deallocate statistic

return

Задание 9

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

create procedure lr8_9 as

declare @v_itog int

declare @k_itog int

declare @summary int

declare @k_name char(20)

declare @v_name char(16)

declare @k_temp char(20)

declare statistic cursor for

select kat_obucheniya,nazvanie_vuza, count(*) from arm

join kat_obuch on kat_obuch_k = cod

join vuz_gorod on vuz_k=cod_vuza

group by kat_obucheniya,nazvanie_vuza

order by kat_obucheniya

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

select @k_itog = 0

select @summary = 0

open statistic

--пробный fetch

fetch statistic into @k_name,@v_name,@v_itog

--проверка статуса

--крах

if (@@fetch_status=-2)

begin

print 'Ошибка при выполнении первого FETCH'

close statistic

return

end

--отсутствие данных

if (@@fetch_status=-1)

begin

print 'Данные не найдены'

close statistic

return

end

--нормальный ход событий

select @k_itog = @k_itog+@v_itog

select @summary = @summary + @v_itog

select @k_temp = @k_name

print 'По категории '+@k_name+' учится '+str(@v_itog)+' человек/а в вузе '+@v_name

while(@@FETCH_STATUS=0)

begin

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

fetch statistic into @k_name,@v_name,@v_itog

--если поменялся город,то:

if(@k_name!=@k_temp)

begin

print 'По категории '+@k_temp+' всего учится '+str(@k_itog)+'человек/а'

select @k_temp = @k_name

select @k_itog = 0

end

--если закончились данные

if (@@FETCH_STATUS = -1)

begin

break

end

print 'По категории '+@k_name+' учится '+str(@v_itog)+' человек/а в вузе '+@v_name

select @k_itog = @k_itog+@v_itog

select @summary = @summary+@v_itog

end

close statistic

print 'По категории '+@k_name+' всего учится '+str(@k_itog)+' человек/а'

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

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

deallocate statistic

return