Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема_Update_необычный  [new]
SQLkowka
Member

Откуда:
Сообщений: 63
Проблема!
Добрый день!
Прошу помочь.

Есть 2 таблицы в одной данные
Первая Таблица1:
ФИО Школа Дата Оценка
ААА 1 01,02,09 5
ААА 1 02,02,09 5
ААА 1 03,02,09 5
ААА 1 04,02,09 5
ААА 1 05,02,09 5
.....(и т.д.)
ААА 1 01,03,09 5
ААА 1 02,03,09 8
ААА 1 03,03,09 7
....
ССС 1 01,02,09 8
....
ССС 1 01,03,09 8
ССС 1 02,03,09 8
ССС 1 03,03,09 8
ССС 1 04,03,09 8
...
ВВВ 1 01,02,09 7
ААА 2 01,04,09 6
ССС 2 01,01,08 9
ВВВ 2 04,02,09 4
ККК 3 05,05,09 3


В другой тоже самое
Вторая Таблица2:
ФИО Школа Дата Оценка
ААА 1 01,03,09 1
ССС 1 01,03,09 1
ВВВ 1 01,03,09 2
ААА 2 01,05,09 2
ССС 2 01,05,08 2
ССС 2 25,05,08 2
ВВВ 2 04,03,09 1
ВВВ 2 04,05,09 4
ККК 3 05,03,09 1


В каждой много записей,но в
Первой таблице1 данные для каждого ученика каждая школа и каждый день,
а во второй Таблице2 данные для каждого ученика каждая школа и день когда оценка поменялась
(такая запись может быть одна, а может быть сколько угодно, хоть раз в месяц, хоть раз в неделю),
т.е. она могла изменится и в январе, а после данных, нет, тогда нужно после этой даты поставить
В первую таблицу1,
для этого ученика этой школы и оценку измененную, на каждый последующий день


Замечание : один и тот же ученик может быть в разных школах, в одну и ту же дату.

Если меня кто нить понял, прошу помочь.

Если б для каждой школы и для каждого ученика был бы каждый день, проблем было бы "0",
update dbo.Таблица1
set dbo.Таблица1.Оценка=dbo.Таблица2.ОценкаИзмененная
from  dbo.Таблица2
where dbo.Таблица1.ФИО=dbo.Таблица2.ФИО
and  dbo.Таблица1.Дата=dbo.Таблица2.Дата 
and dbo.Таблица1.Школа=dbo.Таблица2.Школа
но....нужно именно так....................
Должно получится:
ААА 1 01,02,09 5
ААА 1 02,02,09 5
ААА 1 03,02,09 5
ААА 1 04,02,09 5
ААА 1 05,02,09 5
.....(и т.д.)
ААА 1 01,03,09 1
ААА 1 02,03,09 1
ААА 1 03,03,09 1

....
ССС 1 01,02,09 8
....
ССС 1 01,03,09 1
ССС 1 02,03,09 1
ССС 1 03,03,09 1
ССС 1 04,03,09 1
ССС 1 05,03,09 1
ССС 1 06,03,09 1
ССС 1 07,03,09 1
....
ССС 1 07,05,09 1

...
ВВВ 1 01,02,09 7
....
ААА 2 01,04,09 6
ССС 2 01,01,08 9
ВВВ 2 04,02,09 4
ККК 3 05,05,09 3


заранее спасибо!!!!
28 май 09, 17:41    [7241282]     Ответить | Цитировать Сообщить модератору
 Re: Проблема_Update_необычный  [new]
SQLkowka
Member

Откуда:
Сообщений: 63
SQLkowka,
DECLARE authors_cursor CURSOR FOR
SELECT Школа,ФИО,Дата,Оценка_изменненная  FROM Таблица2
ORDER BY Дата
--нужно ли указывать Школа,ФИО?


OPEN authors_cursor

FETCH NEXT FROM authors_cursor
INTO @Школа, @ФИО,@Дата,@Оценка_изменненная

WHILE @@FETCH_STATUS = 0
BEGIN
   update dbo.Таблица1 set  Оценка=Оценка_изменненная
   where  ДатаОпер>=Дата  and (dbo.Таблица1.Школа=Школа
   and dbo.Таблица1.SHIF=ФИО )
   --нужно ли у курсора прописывать имя.поле
   --FETCH NEXT FROM authors_cursor
   --INTO @Школа, @ФИО,@Дата,@Оценка_изменненная
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

Можете ответить, я поняла наверное мне курсором надо, так правильно или я что-то упустила,
слишком важные данные, не могу просто про update

Спасибо
29 май 09, 09:08    [7242542]     Ответить | Цитировать Сообщить модератору
 Re: Проблема_Update_необычный  [new]
SQLkowka
Member

Откуда:
Сообщений: 63
SQLkowka,

DECLARE authors_cursor CURSOR FOR
SELECT Школа,ФИО,Дата,Оценка_изменненная  FROM Таблица2
ORDER BY Дата
--нужно ли указывать Школа,ФИО?


OPEN authors_cursor

FETCH NEXT FROM authors_cursor
INTO @Школа, @ФИО,@Дата,@Оценка_изменненная

WHILE @@FETCH_STATUS = 0
BEGIN
   update dbo.Таблица1 set  Оценка=@Оценка_изменненная
   where  ДатаОпер>=@Дата  and (dbo.Таблица1.Школа=@Школа
   and dbo.Таблица1.SHIF=@ФИО )

   --FETCH NEXT FROM authors_cursor
   --INTO @Школа, @ФИО,@Дата,@Оценка_изменненная
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

Один вопрос сняла, сама догадалась, помогите, первый в жизни курсор пишу для реализации.....
29 май 09, 09:18    [7242565]     Ответить | Цитировать Сообщить модератору
 Re: Проблема_Update_необычный  [new]
SQLkowka
Member

Откуда:
Сообщений: 63
SQLkowka,

DECLARE authors_cursor CURSOR FOR
SELECT Школа,ФИО,Дата,Оценка_изменненная  FROM Таблица2
ORDER BY Дата
[b]--нужно ли указывать Школа,ФИО?[/b]


OPEN authors_cursor

FETCH NEXT FROM authors_cursor
INTO @Школа, @ФИО,@Дата,@Оценка_изменненная

WHILE @@FETCH_STATUS = 0
BEGIN
   update dbo.Таблица1 set  Оценка=@Оценка_изменненная
   where  ДатаОпер>=@Дата  and (dbo.Таблица1.Школа=@Школа
   and dbo.Таблица1.SHIF=@ФИО )

   --FETCH NEXT FROM authors_cursor
   --INTO @Школа, @ФИО,@Дата,@Оценка_изменненная
END
[i]   --FETCH NEXT FROM authors_cursor
   --INTO @Школа, @ФИО,@Дата,@Оценка_изменненная[/i]
[b]--наверное это уже здесь надо писать чтоб не в цикле выполнялось,так?[/b]
CLOSE authors_cursor
DEALLOCATE authors_cursor
GO
29 май 09, 09:23    [7242593]     Ответить | Цитировать Сообщить модератору
 Re: Проблема_Update_необычный  [new]
SQLkowka
Member

Откуда:
Сообщений: 63
SQLkowka,

Хотела выделить, но вместе с скюл не сработало, помогите, пож-та.
Спасибо.
29 май 09, 09:24    [7242599]     Ответить | Цитировать Сообщить модератору
 Re: Проблема_Update_необычный  [new]
SQLkowka
Member

Откуда:
Сообщений: 63
DECLARE authors_cursor CURSOR FOR
SELECT Школа,ФИО,Дата,Оценка_изменненная  FROM Таблица2
ORDER BY Дата

OPEN authors_cursor

FETCH NEXT FROM authors_cursor
INTO @Школа, @ФИО,@Дата,@Оценка_изменненная

WHILE @@FETCH_STATUS = 0
BEGIN
   update dbo.Таблица1 set  Оценка=@Оценка_изменненная
   where  ДатаОпер>=@Дата  and (dbo.Таблица1.Школа=@Школа
   and dbo.Таблица1.SHIF=@ФИО )

   FETCH NEXT FROM authors_cursor
   INTO @Школа, @ФИО,@Дата,@Оценка_изменненная
END
CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

Остался одни вопрос "To be or not to be?"
29 май 09, 09:41    [7242653]     Ответить | Цитировать Сообщить модератору
 Re: Проблема_Update_необычный  [new]
aleks2
Guest
SQLkowka,

Курсоры - тухляк.
update T1 set  Оценка=T2.Оценка_изменненная
FROM 
dbo.Таблица1 T1
INNER JOIN
dbo.Таблица2 T2
ON 
T1.ДатаОпер>=T2.Дата  and T1.Школа=T2.Школа T1.SHIF=T2.ФИО
AND 
not exists(select * FROM dbo.Таблица2 X WHERE T1.SHIF=X.ФИО AND T1.Школа=X.Школа AND 
                                              T2.Дата<X.Дата AND X.Дата<=T1.ДатаОпер
29 май 09, 09:55    [7242701]     Ответить | Цитировать Сообщить модератору
 Re: Проблема_Update_необычный  [new]
iljy
Guest
SQLkowka,
вы не могли бы объяснить, зачем вообще нужна таблица 1? у вас в таблице 2 есть все необходимые данные, из нее всегда можно получить оценку ученика на любой день в любой школе:

SELECT top 1 ФИО, Школа, Дата, Оценка
FROM Таблица2
WHERE
   [ФИО] = @ФИО and
   [Школа] = @Школа and
   [Дата] <= @Дата
order by [Дата] DESC

можно получить любые данные, хоть на каждый день, как у вас в первой таблице. Если надо - напишу как.
29 май 09, 11:16    [7243146]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить