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