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

Задание 8

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

create procedure be2 as

declare @ac integer

declare x cursor for

select count(*)

from bel

open x

fetch x into @ac

if(@@FETCH_STATUS = -2) begin

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

close x

return

end

if(@@FETCH_STATUS = -1) begin

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

close x

return

end

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

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

close x

return

deallocate x

create procedure sp as

declare @gp char(2)

declare @spec char(6)

declare @pc integer

declare @sc integer

declare @gp1 char(2)

declare y cursor for

select spec, gp, count(*)

from bel

group by gp,spec

order by gp

select @pc = 0

open y

fetch y into @spec, @gp, @sc

if(@@FETCH_STATUS = -2) begin

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

close y

return

end

if(@@FETCH_STATUS = -1) begin

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

close y

return

end

select @gp1 = @gp

print @spec+' -'+str(@sc)

select @pc = @pc + @sc

while (@@FETCH_STATUS = 0)

begin

fetch y into @spec, @gp, @sc

if (@gp != @gp1) begin

print 'Год приёма ' + @gp1 + ' - ' + str(@pc)

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

select @gp1 = @gp

select @pc = 0

end

if (@@FETCH_STATUS = -1) break

print @spec + ' - ' + str(@sc)

select @pc = @pc + @sc

end

close y

if (@@FETCH_STATUS = -2) begin

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

return

end

print 'Год приёма ' + @gp + ' - ' + str(@pc)

deallocate y

return

exec be2

exec sp

Задание 9

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

create procedure be3 as

declare @ac integer

declare x cursor for

select count(*)

from bel

open x

fetch x into @ac

if(@@FETCH_STATUS = -2) begin

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

close x

return

end

if(@@FETCH_STATUS = -1) begin

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

close x

return

end

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

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

close x

return

deallocate x

alter procedure kv1 as

declare @vuz char(25)

declare @ko char(20)

declare @kc integer

declare @vc integer

declare @vuz1 char(25)

declare y cursor for

select vuz.uch_zavedenie, kat_obuch.kat_obucheniya, count(*)

from bel join vuz on vuz_k = cod

join kat_obuch on kat_obuch_k = kat_obuch.cod

group by vuz.uch_zavedenie,kat_obuch.kat_obucheniya

order by vuz.uch_zavedenie

select @vc = 0

open y

fetch y into @vuz, @ko, @kc

if(@@FETCH_STATUS = -2) begin

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

close y

return

end

if(@@FETCH_STATUS = -1) begin

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

close y

return

end

select @vuz1 = @vuz

print @ko+' -'+str(@kc)

select @vc = @vc + @kc

while (@@FETCH_STATUS = 0)

begin

fetch y into @vuz, @ko, @kc

if (@vuz != @vuz1) begin

print 'ÂÓÇ ' + @vuz1 + ' - ' + str(@vc)

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

select @vuz1 = @vuz

select @vc = 0

end

if (@@FETCH_STATUS = -1) break

print @ko + ' - ' + str(@kc)

select @vc = @vc + @kc

end

close y

if (@@FETCH_STATUS = -2) begin

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

return

end

print 'Ãîä ïðè¸ìà ' + @vuz + ' - ' + str(@vc)

deallocate y

return

exec be3

exec kv1