Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы (А-13-07) / Дадыкин, Санганджиев / Лабораторная работа №8(Дадыкин А.).doc
Скачиваний:
36
Добавлен:
28.06.2014
Размер:
237.06 Кб
Скачать

    1. Лабораторная работа №8

Выполнил: Дадыкин А.

Группа: А-13-07

Преподаватель: Сидорова Н.П.

        1. Задание 8

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

CREATE Procedure lab8_8 AS

DECLARE @gp VARCHAR (2),

@spec VARCHAR (6),

@specCount INT,

@YearCount INT,

@TotalCount INT,

@gp1 VARCHAR (6);

DECLARE y cursor for

SELECT gp, spec, COUNT (*)

FROM ukr

GROUP BY gp, spec

ORDER BY gp

SELECT @YearCount=0

SELECT @TotalCount=0

OPEN y

FETCH y INTO @gp, @spec, @specCount

IF (@@FETCH_STATUS=-2)

BEGIN

PRINT 'Ошибка в FETCH'

CLOSE y

RETURN

END

IF (@@FETCH_STATUS=-1)

BEGIN

PRINT 'Данные не найдены'

CLOSE y

RETURN

END

SELECT @gp1=@gp

PRINT @spec+' -'+str(@specCount)

SELECT @YearCount=@YearCount+@specCount

SELECT @TotalCount=@TotalCount+@specCount

WHILE (@@FETCH_STATUS=0)

BEGIN

FETCH y INTO @gp, @spec, @specCount

IF (@gp1 !=@gp )

BEGIN

PRINT 'Год приема ' + @gp1 + ' - ' +str(@YearCount)

SELECT @gp1=@gp

SELECT @YearCount=0

END

IF (@@FETCH_STATUS=-1)

BREAK

PRINT @spec + ' - ' +str(@specCount)

SELECT @YearCount=@YearCount+@specCount

SELECT @TotalCount=@TotalCount+@specCount

END

CLOSE y

IF (@@FETCH_STATUS=-2)

BEGIN

PRINT 'Ошибка в FETCH'

RETURN

END

PRINT 'Год приема ' + @gp + ' - ' +str(@YearCount)

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

PRINT 'Общее количество -'+str(@TotalCount)

DEALLOCATE y

RETURN

Запрос: exec lab8_8

Результат:

        1. Задание 9

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

create procedure lab8_9 as

declare @kategoria char (16),

@Univer char (25),

@UniverCount int ,

@kategoriaCount int,

@TotalCount int,

@kategoria1 char (16);

declare C cursor for

select kat_obuch.kat_obucheniya, vuz.uch_zavedenie, count (*)

from ukr join vuz on vuz_k=vuz.cod

join kat_obuch on kat_obuch_k=kat_obuch.cod

group by kat_obuch.kat_obucheniya, vuz.uch_zavedenie

order by kat_obuch.kat_obucheniya

set @kategoriaCount=0

set @TotalCount=0

open C

fetch C into @kategoria, @Univer, @UniverCount

if (@@fetch_status=-2)

begin

print 'ошибка в FETCH'

close C

return

end

if (@@fetch_status=-1)

begin

print 'Данных нет'

close C

return

end

set @kategoria1=@kategoria

print @Univer+' - '+str(@UniverCount)

set @kategoriaCount=@kategoriaCount+@UniverCount

set @TotalCount=@TotalCount+@UniverCount

while (@@fetch_status=0)

begin

fetch C into @kategoria, @Univer, @UniverCount

if (@kategoria1 !=@kategoria)

begin

print 'Категория обучения ' + @kategoria1 + ' - ' +str(@kategoriaCount)

select @kategoria1=@kategoria

select @kategoriaCount=0

end

if (@@fetch_status=-1)

break

print @Univer + ' - ' +str(@UniverCount)

set @kategoriaCount=@kategoriaCount+@UniverCount

set @TotalCount=@TotalCount+@UniverCount

end

close C

if (@@fetch_status=-2)

begin

print 'Ошибка в FETCH'

return

end

print 'Категория обучения ' + @kategoria + ' - ' +str(@kategoriaCount)

print '+----------------------------------+'

print 'Всего по запросу-'+str(@TotalCount)

deallocate C

return

Запрос: exec lab8_9

Результат: