Задание 15
Выдать
статистику по специальностям и учебным
заведениям вашего государства. Отчёт
должен начинаться с заголовка и цифры
- общего количества записей по запросу.
Далее совокупность таблиц, где каждая
таблица начинается с заголовка:
СПЕЦИАЛЬНОСТЬ <шифр> - ВСЕГО <цифра>,
не равная нулю, а заканчивается перечнем
названий учебных заведений с цифрами,
не равными нулю.
Запрос:
CREATE
PROCEDURE
lab8_p15
AS
BEGIN
DECLARE
@sp1
CHAR(25),
@sp2
CHAR(25),
@vuz
CHAR(25),
@it1
INT,
@it2
INT,
@r
INT
SET
@r
=
(SELECT
count(*)
FROM
arm)
PRINT
'Всего
учащихся: '
+
ltrim(str(@r))
DECLARE
cur
CURSOR
FOR
SELECT
spec,
count(*)
FROM
arm
GROUP
BY
spec
ORDER
BY
spec
OPEN
cur
FETCH
cur
INTO
@sp1,
@it1
EXECUTE
@r
=
fetch_check
IF(@r
=
1)
BEGIN
CLOSE
cur
RETURN
END
DECLARE
cur2
CURSOR
FOR
SELECT
spec,
nazvanie_vuza,
count(*)
FROM
arm
JOIN
vuz_gorod
ON
vuz_gorod.cod_vuza
=
vuz_k
GROUP
BY
spec,
nazvanie_vuza
ORDER
BY
spec,
nazvanie_vuza
OPEN
cur2
FETCH
cur2
INTO
@sp2,
@vuz,
@it2
EXECUTE
@r
=
fetch_check
IF(@r
=
1)
BEGIN
CLOSE
cur2
RETURN
END
PRINT
''
PRINT
@sp1
+
'
- '
+
ltrim(str(@it1))
PRINT
'-------------------------------'
PRINT
@vuz
+
'
- '
+
ltrim(str(@it2))
WHILE(@@fetch_status
=
0)
BEGIN
FETCH
cur2
INTO
@sp2,
@vuz,
@it2
WHILE(@sp1
!=
@sp2)
BEGIN
FETCH
cur
INTO
@sp1,
@it1
PRINT
''
PRINT
@sp1
+
'
- '
+
ltrim(str(@it1))
PRINT
'-------------------------------'
PRINT
@vuz
+
'
- '
+
ltrim(str(@it2))
FETCH
cur2
INTO
@sp2,
@vuz,
@it2
END
IF(@@fetch_status
=
-1)
BREAK
PRINT
@vuz
+
'
- '
+
ltrim(str(@it2))
END
CLOSE
cur
DEALLOCATE
cur
CLOSE
cur2
DEALLOCATE
cur2
RETURN
END
Результат: