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

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