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

Задание 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