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

Задание 14

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

create procedure gu as

declare @gor char(20)

declare @vuz char(25)

declare @vc integer

declare @gc integer

declare @ac integer

declare @gor1 char(20)

declare y cursor for

select vuz_gorod.nazvanie_goroda, vuz_gorod.nazvanie_vuza, count(*)

from bel join vuz_gorod on cod_vuza = vuz_k

where pol = 'М'

group by vuz_gorod.nazvanie_goroda, vuz_gorod.nazvanie_vuza

order by vuz_gorod.nazvanie_goroda

select @gc = 0

select @ac = 0

open y

fetch y into @gor, @vuz, @vc

if(@@FETCH_STATUS = -2) begin

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

close y

return

end

if(@@FETCH_STATUS = -1) begin

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

close y

return

end

select @gor1 = @gor

print @vuz+' -'+str(@vc)

select @gc = @gc + @vc

select @ac = @ac + @vc

while (@@FETCH_STATUS = 0)

begin

fetch y into @gor, @vuz, @vc

if (@gor != @gor1) begin

print 'Город ' + @gor1 + ' - ' + str(@gc)

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

select @gor1 = @gor

select @gc = 0

end

if (@@FETCH_STATUS = -1) break

print @vuz + ' - ' + str(@vc)

select @gc = @gc + @vc

select @ac = @ac + @vc

end

close y

if (@@FETCH_STATUS = -2) begin

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

return

end

print 'Город ' + @gor + ' - ' + str(@gc)

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

print'всего по запосу - ' + str(@ac)

deallocate y

return

gu

Задание 15

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

alter procedure be6 as

declare @ac integer

declare z cursor for

select count(*)

from bel

open z

fetch z into @ac

if(@@FETCH_STATUS = -2) begin

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

close z

return

end

if(@@FETCH_STATUS = -1) begin

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

close z

return

end

print 'Всего - ' + str(@ac )

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

close z

return

deallocate z

create procedure sv as

declare @spec char(25)

declare @vuz char(6)

declare @sc integer

declare @vc integer

declare @spec1 char(25)

declare y cursor for

select spec, vuz.uch_zavedenie, count(*)

from bel join vuz on vuz_k = cod

group by spec, vuz.uch_zavedenie

order by spec

select @sc = 0

open y

fetch y into @spec, @vuz, @vc

if(@@FETCH_STATUS = -2) begin

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

close y

return

end

if(@@FETCH_STATUS = -1) begin

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

close y

return

end

select @spec1 = @spec

print @vuz+' -'+str(@vc)

select @sc = @sc + @vc

while (@@FETCH_STATUS = 0)

begin

fetch y into @spec, @vuz, @vc

if (@spec != @spec1) begin

print 'Специальность ' + @spec1 + ' - ' + str(@sc)

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

select @spec1 = @spec

select @sc = 0

end

if (@@FETCH_STATUS = -1) break

print @vuz + ' - ' + str(@vc)

select @sc = @sc + @vc

end

close y

if (@@FETCH_STATUS = -2) begin

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

return

end

print 'Специальность ' + @spec + ' - ' + str(@sc)

deallocate y

return

exec be6

exec sv