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

Задание 13

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

Запрос:

CREATE PROCEDURE lab8_p13 AS

BEGIN

DECLARE @g1 CHAR(20), @g2 CHAR(20), @gok CHAR(18), @it1 INT, @it2 INT, @r INT

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

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

DECLARE cur CURSOR FOR

SELECT nazvanie_goroda, count(*)

FROM arm

JOIN vuz_gorod ON vuz_gorod.cod_vuza = vuz_k

GROUP BY nazvanie_goroda

ORDER BY nazvanie_goroda

OPEN cur

FETCH cur INTO @g1, @it1

EXECUTE @r = fetch_check

IF(@r = 1)

BEGIN

CLOSE cur

RETURN

END

DECLARE cur2 CURSOR FOR

SELECT nazvanie_goroda, gok, count(*)

FROM arm

JOIN vuz_gorod ON vuz_gorod.cod_vuza = vuz_k

GROUP BY nazvanie_goroda, gok

ORDER BY nazvanie_goroda, gok

OPEN cur2

FETCH cur2 INTO @g2, @gok, @it2

EXECUTE @r = fetch_check

IF(@r = 1)

BEGIN

CLOSE cur2

RETURN

END

PRINT ''

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

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

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

WHILE(@@fetch_status = 0)

BEGIN

FETCH cur2 INTO @g2, @gok, @it2

WHILE(@g1 != @g2)

BEGIN

FETCH cur INTO @g1, @it1

PRINT ''

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

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

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

FETCH cur2 INTO @g2, @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

Результат:

Задание 14

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

Запрос:

CREATE PROCEDURE lab8_p14 AS

BEGIN

DECLARE @g1 CHAR(25), @g2 CHAR(25), @vuz CHAR(25), @it1 INT, @it2 INT, @r INT

DECLARE cur CURSOR FOR

SELECT nazvanie_goroda, count(*)

FROM arm

JOIN vuz_gorod ON vuz_gorod.cod_vuza = vuz_k

WHERE pol = 'М'

GROUP BY nazvanie_goroda

ORDER BY nazvanie_goroda

OPEN cur

FETCH cur INTO @g1, @it1

EXECUTE @r = fetch_check

IF(@r = 1)

BEGIN

CLOSE cur

RETURN

END

DECLARE cur2 CURSOR FOR

SELECT nazvanie_goroda, nazvanie_vuza, count(*)

FROM arm

JOIN vuz_gorod ON vuz_gorod.cod_vuza = vuz_k

WHERE pol = 'М'

GROUP BY nazvanie_goroda, nazvanie_vuza

ORDER BY nazvanie_goroda, nazvanie_vuza

OPEN cur2

FETCH cur2 INTO @g2, @vuz, @it2

EXECUTE @r = fetch_check

IF(@r = 1)

BEGIN

CLOSE cur2

RETURN

END

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

WHILE(@@fetch_status = 0)

BEGIN

FETCH cur2 INTO @g2, @vuz, @it2

WHILE(@g1 != @g2)

BEGIN

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

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

PRINT ''

FETCH cur INTO @g1, @it1

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

FETCH cur2 INTO @g2, @vuz, @it2

END

IF(@@fetch_status = -1) BREAK

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

END

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

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

CLOSE cur

DEALLOCATE cur

CLOSE cur2

DEALLOCATE cur2

PRINT ''

SET @r = (SELECT count(*) FROM arm WHERE pol = 'М')

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

RETURN

END

Результат: