Задание 7
Выдать статистику по выпуску 1994 года вашего государства по всем учебным заведениям и категориям обучения. Отчёт должен начинаться с заголовка и цифры - общего количества записей по запросу (выпуску 1994 г.). Далее перечень таблиц, где каждая таблица начинается с заголовка: <название учебного заведения> - <цифра>, не равная нулю, а заканчивается перечнем категорий обучения с цифрами, не равными нулю.
Запрос:
CREATE PROCEDURE lab8_p7 AS
BEGIN
DECLARE @v1 CHAR(25), @v2 CHAR(25), @kat CHAR(25), @it1 INT, @it2 INT, @r INT
SET @r = (SELECT count(*) FROM arm WHERE gok = '94')
PRINT 'Всего учащихся: ' + ltrim(str(@r))
DECLARE cur CURSOR FOR
SELECT nazvanie_vuza, count(*)
FROM arm
JOIN vuz_gorod ON vuz_gorod.cod_vuza = vuz_k
WHERE gok = '94'
GROUP BY nazvanie_vuza
ORDER BY nazvanie_vuza
OPEN cur
FETCH cur INTO @v1, @it1
EXECUTE @r = fetch_check
IF(@r = 1)
BEGIN
CLOSE cur
RETURN
END
DECLARE cur2 CURSOR FOR
SELECT nazvanie_vuza, kat_obucheniya, count(*)
FROM arm
JOIN vuz_gorod ON vuz_gorod.cod_vuza = vuz_k
JOIN kat_obuch ON kat_obuch.cod = kat_obuch_k
WHERE gok = '94'
GROUP BY nazvanie_vuza, kat_obucheniya
ORDER BY nazvanie_vuza, kat_obucheniya
OPEN cur2
FETCH cur2 INTO @v2, @kat, @it2
EXECUTE @r = fetch_check
IF(@r = 1)
BEGIN
CLOSE cur2
RETURN
END
PRINT ''
PRINT @v1 + ' - ' + ltrim(str(@it1))
PRINT '-------------------------------'
PRINT @kat + ' - ' + ltrim(str(@it2))
WHILE(@@fetch_status = 0)
BEGIN
FETCH cur2 INTO @v2, @kat, @it2
WHILE(@v1 != @v2)
BEGIN
FETCH cur INTO @v1, @it1
PRINT ''
PRINT @v1 + ' - ' + ltrim(str(@it1))
PRINT '-------------------------------'
PRINT @kat + ' - ' + ltrim(str(@it2))
FETCH cur2 INTO @v2, @kat, @it2
END
IF(@@fetch_status = -1) BREAK
PRINT @kat + ' - ' + ltrim(str(@it2))
END
CLOSE cur
DEALLOCATE cur
CLOSE cur2
DEALLOCATE cur2
RETURN
END
Результат:
Задание 8
Выдать статистику по годам приёма и по специальностям учащихся вашего государства. Отчёт должен начинаться с заголовка и цифры общего количества записей по запросу. Далее совокупность таблиц, где каждая таблица начинается с заголовка: <год приёма> - <цифра>, не равная нулю, а заканчивается перечнем шифров специальностей с цифрами, не равными нулю.
Запрос:
CREATE PROCEDURE lab8_p8 AS
BEGIN
DECLARE @gp1 CHAR(2), @gp2 CHAR(2), @sp CHAR(6), @it1 INT, @it2 INT, @r INT
SET @r = (SELECT count(*) FROM arm)
PRINT 'Всего учащихся: ' + ltrim(str(@r))
DECLARE cur CURSOR FOR
SELECT gp, count(*) FROM arm GROUP BY gp ORDER BY gp
OPEN cur
FETCH cur INTO @gp1, @it1
EXECUTE @r = fetch_check
IF(@r = 1)
BEGIN
CLOSE cur
RETURN
END
DECLARE cur2 CURSOR FOR
SELECT gp, spec, count(*) FROM arm GROUP BY gp, spec ORDER BY gp, spec
OPEN cur2
FETCH cur2 INTO @gp2, @sp, @it2
EXECUTE @r = fetch_check
IF(@r = 1)
BEGIN
CLOSE cur2
RETURN
END
PRINT ''
PRINT '19' + @gp1 + ' - ' + ltrim(str(@it1))
PRINT '---------------------'
PRINT @sp + ' - ' + ltrim(str(@it2))
WHILE(@@fetch_status = 0)
BEGIN
FETCH cur2 INTO @gp2, @sp, @it2
WHILE(@gp1 != @gp2)
BEGIN
FETCH cur INTO @gp1, @it1
PRINT ''
PRINT '19' + @gp1 + ' - ' + ltrim(str(@it1))
PRINT '---------------------'
PRINT @sp + ' - ' + ltrim(str(@it2))
FETCH cur2 INTO @gp2, @sp, @it2
END
IF(@@fetch_status = -1) BREAK
PRINT @sp + ' - ' + ltrim(str(@it2))
END
CLOSE cur
DEALLOCATE cur
CLOSE cur2
DEALLOCATE cur2
RETURN
END
Результат: