Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
48
Добавлен:
28.06.2014
Размер:
1.21 Mб
Скачать

Задание 5

Выдать статистику по учебным заведениям и категориям обучения вашего государства, включая цифры по выпуску 1993 года и по приёму 1990 года по каждой категории обучения. Отчёт должен начинаться с за­головка и цифры - общего количества записей по запросу. Далее сово­купность таблиц, где каждая таблица начинается с заголовка: <название учебного заведения> - <цифра>, не равная нулю, а заканчива­ется перечнем категорий обучения с тремя цифрами: 1) всего (не равная нулю); 2) выпуск 1993 г.; 3) приём 1990 г.

Запрос:

ALTER PROCEDURE lab8_p5 AS

BEGIN

DECLARE @v1 CHAR(25), @v2 CHAR(25), @kat CHAR(16), @it1 INT, @it2 INT, @it3 INT, @it4 INT, @r INT

SET @r = (SELECT count(*) FROM arm WHERE gok = '93' OR gp = '90')

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 = '93' OR gp = '90'

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(*),

sum(CASE WHEN gok = '93' THEN 1 ELSE 0 END),

sum(CASE WHEN gp = '90' THEN 1 ELSE 0 END)

FROM arm

JOIN vuz_gorod ON vuz_gorod.cod_vuza = vuz_k

JOIN kat_obuch ON kat_obuch.cod = kat_obuch_k

WHERE gok = '93' OR gp = '90'

GROUP BY nazvanie_vuza, kat_obucheniya

ORDER BY nazvanie_vuza, kat_obucheniya

OPEN cur2

FETCH cur2 INTO @v2, @kat, @it2, @it3, @it4

EXECUTE @r = fetch_check

IF(@r = 1)

BEGIN

CLOSE cur2

RETURN

END

PRINT ''

PRINT rtrim(@v1) + ' - ' + ltrim(str(@it1))

PRINT '---------------------------------------------------------'

PRINT ' Категория обуч. | Всего | Выпуск 1993 | Приём 1990 '

PRINT '---------------------------------------------------------'

PRINT @kat + ' | ' + str(@it2) + ' | ' + str(@it3) + ' | ' + str(@it4)

WHILE(@@fetch_status = 0)

BEGIN

FETCH cur2 INTO @v2, @kat, @it2, @it3, @it4

WHILE(@v1 != @v2)

BEGIN

FETCH cur INTO @v1, @it1

PRINT ''

PRINT @v1 + ' - ' + ltrim(str(@it1))

PRINT '---------------------------------------------------------'

PRINT ' Категория обуч. | Всего | Выпуск 1993 | Приём 1990 '

PRINT '---------------------------------------------------------'

PRINT @kat + ' | ' + str(@it2) + ' | ' + str(@it3) + ' | ' + str(@it4)

FETCH cur2 INTO @v2, @kat, @it2, @it3, @it4

END

IF(@@fetch_status = -1) BREAK

PRINT @kat + ' | ' + str(@it2) + ' | ' + str(@it3) + ' | ' + str(@it4)

END

CLOSE cur

DEALLOCATE cur

CLOSE cur2

DEALLOCATE cur2

RETURN

END

Результат:

Задание 6

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

Запрос:

CREATE PROCEDURE lab8_p6 AS

BEGIN

DECLARE @v1 CHAR(25), @v2 CHAR(25), @gok CHAR(2), @it1 INT, @it2 INT, @r INT

SET @r = (SELECT count(*) FROM arm)

PRINT 'Всего учащихся: ' + ltrim(str(@r))

DECLARE cur CURSOR FOR

SELECT nazvanie_vuza, count(*)

FROM arm

JOIN vuz_gorod ON vuz_gorod.cod_vuza = vuz_k

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, gok, count(*)

FROM arm

JOIN vuz_gorod ON vuz_gorod.cod_vuza = vuz_k

GROUP BY nazvanie_vuza, gok

ORDER BY nazvanie_vuza, gok

OPEN cur2

FETCH cur2 INTO @v2, @gok, @it2

EXECUTE @r = fetch_check

IF(@r = 1)

BEGIN

CLOSE cur2

RETURN

END

PRINT ''

PRINT @v1 + ' - ' + ltrim(str(@it1))

PRINT '-------------------------------'

PRINT '19' + @gok + ' - ' + ltrim(str(@it2))

WHILE(@@fetch_status = 0)

BEGIN

FETCH cur2 INTO @v2, @gok, @it2

WHILE(@v1 != @v2)

BEGIN

FETCH cur INTO @v1, @it1

PRINT ''

PRINT @v1 + ' - ' + ltrim(str(@it1))

PRINT '-------------------------------'

PRINT '19' + @gok + ' - ' + ltrim(str(@it2))

FETCH cur2 INTO @v2, @gok, @it2

END

IF(@@fetch_status = -1) BREAK

PRINT '19' + @gok + ' - ' + ltrim(str(@it2))

END

CLOSE cur

DEALLOCATE cur

CLOSE cur2

DEALLOCATE cur2

RETURN

END

Результат: