Форумы HiProg.com - MS ACCESS, VBA, VB

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

ник: Мюллер
Вчера образовался у мну дополнительный выходной, потому посмотрел только сегодня.

Таблица Table1 имеет вид
Id
MyNum
MySum
MyComp - наименование компании

Тогда хранимка должна быть такой



ALTER PROCEDURE _spMyProc

AS
DECLARE @MySum int
DECLARE @MyNum int
DECLARE @Id int
DECLARE @MyComp nvarchar(50)

DECLARE CurComp CURSOR FOR
SELECT DISTINCT MyComp FROM Table1
OPEN CurComp
FETCH NEXT FROM CurComp INTO @MyComp
WHILE @@FETCH_STATUS = 0
BEGIN

SET @MySum=0
DECLARE CurSum CURSOR FOR
SELECT MyNum,Id,MyComp FROM Table1 WHERE MyComp LIKE @MyComp
OPEN CurSum

FETCH NEXT FROM CurSum INTO @MyNum ,@Id,@MyComp
WHILE @@FETCH_STATUS = 0
BEGIN
SET @MySum = @MySum + @MyNum
UPDATE Table1 SET MySum = @MySum WHERE Id=@Id AND MyComp LIKE @MyComp
FETCH NEXT FROM CurSum INTO @MyNum ,@Id,@MyComp
END

CLOSE CurSum
DEALLOCATE CurSum

FETCH NEXT FROM CurComp INTO @MyComp
END
CLOSE CurComp
DEALLOCATE CurComp

/* SET NOCOUNT ON */
RETURN




В этой хранимке создается два курсора.
Курсор - это некий аналог датаридера (если работаете с VS, то должны знать, что это такое )
С помощью первого курсора мы создаем запрос , в котором выводим без повторов все компании в нашей таблице (Выделено жирным шрифтом)


DECLARE CurComp CURSOR FOR
SELECT DISTINCT MyComp FROM Table1OPEN CurComp



Этим курсором мы пробегаемся по нашей таблице и с помошью второго курсора апдейтим таблицу в нужных нам полях.


ЗЫ
Вааще-то правильней было сделать две таблицы - одна справочник организаций, а во второй только Id этих организаций. Но это дело вкуса.
Можете, кстати, так и сделать, а заодно потренируетесь на курсорах.{перепишите хранимку исходя из двух таблиц, а не одной}


Ваше имя:

Пароль:

Цитировать: [quote][/quote] Код: [code][/code]
Жирный: [b][/b] Наклонный: [i][/i]
URL: [url][/url] 

Сообщение:

 Размер файла не более 50 Кбт. Большие файлы можно размещать на www.slil.ru

Прикрепить:

 

Для вставки смайлов в текст щелкните по значку.