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

Задание 11

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

Запрос:

CREATE PROCEDURE lab8_p11 AS

BEGIN

DECLARE @kat1 CHAR(20), @kat2 CHAR(20), @g CHAR(20), @it1 INT, @it2 INT, @r INT

SET @r = (SELECT count(*) FROM arm WHERE gp = '91')

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

DECLARE cur CURSOR FOR

SELECT kat_obucheniya, count(*)

FROM arm

JOIN kat_obuch ON kat_obuch.cod = kat_obuch_k

WHERE gp = '91'

GROUP BY kat_obucheniya

ORDER BY kat_obucheniya

OPEN cur

FETCH cur INTO @kat1, @it1

EXECUTE @r = fetch_check

IF(@r = 1)

BEGIN

CLOSE cur

RETURN

END

DECLARE cur2 CURSOR FOR

SELECT kat_obucheniya, nazvanie_goroda, count(*)

FROM arm

JOIN kat_obuch ON kat_obuch.cod = kat_obuch_k

JOIN vuz_gorod ON vuz_gorod.cod_vuza = vuz_k

WHERE gp = '91'

GROUP BY kat_obucheniya, nazvanie_goroda

ORDER BY kat_obucheniya, nazvanie_goroda

OPEN cur2

FETCH cur2 INTO @kat2, @g, @it2

EXECUTE @r = fetch_check

IF(@r = 1)

BEGIN

CLOSE cur2

RETURN

END

PRINT ''

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

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

PRINT @g + ' - ' + ltrim(str(@it2))

WHILE(@@fetch_status = 0)

BEGIN

FETCH cur2 INTO @kat2, @g, @it2

WHILE(@kat1 != @kat2)

BEGIN

FETCH cur INTO @kat1, @it1

PRINT ''

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

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

PRINT @g + ' - ' + ltrim(str(@it2))

FETCH cur2 INTO @kat2, @g, @it2

END

IF(@@fetch_status = -1) BREAK

PRINT @g + ' - ' + ltrim(str(@it2))

END

CLOSE cur

DEALLOCATE cur

CLOSE cur2

DEALLOCATE cur2

RETURN

END

Результат:

Задание 12

Выдать статистику по специальностям и городам вашего государ­ства. Отчёт должен начинаться заголовком и цифрой - общим количеством записей по запросу. Далее совокупность таблиц, где каждая таблица на­чинается с заголовка: СПЕЦИАЛЬНОСТЬ <шифр> - ВСЕГО <цифра>, не равная нулю, а заканчивается перечнем названий городов с цифрами, не равными нулю.

Запрос:

CREATE PROCEDURE lab8_p12 AS

BEGIN

DECLARE @sp1 CHAR(20), @sp2 CHAR(20), @g CHAR(20), @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_goroda, count(*)

FROM arm

JOIN vuz_gorod ON vuz_gorod.cod_vuza = vuz_k

GROUP BY spec, nazvanie_goroda

ORDER BY spec, nazvanie_goroda

OPEN cur2

FETCH cur2 INTO @sp2, @g, @it2

EXECUTE @r = fetch_check

IF(@r = 1)

BEGIN

CLOSE cur2

RETURN

END

PRINT ''

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

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

PRINT @g + ' - ' + ltrim(str(@it2))

WHILE(@@fetch_status = 0)

BEGIN

FETCH cur2 INTO @sp2, @g, @it2

WHILE(@sp1 != @sp2)

BEGIN

FETCH cur INTO @sp1, @it1

PRINT ''

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

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

PRINT @g + ' - ' + ltrim(str(@it2))

FETCH cur2 INTO @sp2, @g, @it2

END

IF(@@fetch_status = -1) BREAK

PRINT @g + ' - ' + ltrim(str(@it2))

END

CLOSE cur

DEALLOCATE cur

CLOSE cur2

DEALLOCATE cur2

RETURN

END

Результат: