Задание 15
Выдать
статистику по специальностям и учебным
заведениям вашего государства. Отчет
должен начинаться с заголовка и цифры
- общего количества записей по запросу.
Далее совокупность таблиц, где каждая
таблица начинается с заголовка:
СПЕЦИАЛЬНОСТЬ <шифр> - ВСЕГО <цифра>,
не равная нулю, а заканчивается перечнем
названий учебных заведений с цифрами,
не равными нулю.
create
procedure
request215
as
declare
@sp
char(25)
declare
@uz
char(15)
declare
@it1
int
/*итог
по
полю
вуз*/
declare
@it2
int
/*итог
по полю специальность*/
declare
@itall
int
declare
@sp1
char(25)
declare
@str1
varchar(8000)
declare
@str2
varchar(8000)
declare
y
cursor
for
select
spec,
vuz_gorod.nazvanie_vuza,
count(*)
from
cir
join
vuz_gorod
on
vuz_k=vuz_gorod.cod_vuza
group
by
spec,
vuz_gorod.nazvanie_vuza
order
by
spec
select
@it2=0
select
@itall=0
open
y
fetch
y
into
@sp,
@uz,
@it1
if
(@@fetch_status=-2)
begin
print
'Ошибка
при выполнении первого FETCH'
close
y
return
end
if
(@@fetch_status=-1)
begin
print
'Данные
не найдены'
close
y
return
end
select
@sp1=@sp
select
@str2=@uz+'-'+str(@it1)
select
@it2=@it2+@it1
select
@itall=@itall+@it1
/*цикл
обработки запроса*/
while
(@@fetch_status=0)
begin
fetch
y
into
@sp,
@uz,
@it1
if
(@sp1!=@sp)
begin
select
@str1='Специальность
'+@sp1+'-'+str(@it2)+'|'+@str2
select
@str2=@str1
select
@sp1=@sp
select
@it2=0
end
if
(@@fetch_status=-1)
break
select
@str1=@uz+'-'+str(@it1)+'|'+@str2
select
@str2=@str1
select
@it2=@it2+@it1
select
@itall=@itall+@it1
end
close
y
if
(@@fetch_status=-2)
begin
print
'Ошибка
при выполнении FETCH'
return
end
select
@str1='Всего
по
запросу-'+str(@itall)+'|'+'----------------------------------'+'|'+'Специальность
'+@sp1+'-'+str(@it2)+'|'+@str2
declare
@n1
bigint
while
(PATINDEX('%|%',@str1)!=0)
begin
select
@n1=PATINDEX('%|%',@str1)
select
@str2=LEFT(@str1,@n1-1)
print
@str2
select
@str1=STUFF(@str1,1,@n1,'')
end
print
@str1
deallocate
y
return