Как работать с несколькими строками

samun
Дата: 07.01.2012 23:03:43
Задача следующая есть продажи по годам
нужно в поле изменения посчитать разницу продаж между i и i-1 годами первый год
________________________________________
год|тип продукта | продажи |изменение |
1 | 1 | 200 | 200 |
2 | 1 | 100 | -100 |
3 | 1 | 300 | 200 |
1 | 2 | 50 | 50 |
2 | 2 | 300 | 250 |
3 | 2 | 100 | -200 |

и т.д.
как это сделать в Microsoft Office Access 2007?

в с# + SQL server я бы выгрузил данные в массив и посчитал, а патом обратно загрузил в БД а тут не знаю как
В идеале сделать запрос к БД
UPDATE [Project Dop] SET 
WHERE ((([Project Dop].[Возврат инвестиций])=[Project Dop]![Выручка]) - (а вот тут функция возвращавшая значение того же поле но в предыдущей записи (а если текущее поле первое то ноль) ) );  

Что я думаю не так? или может я не правильно рассуждаю ?
samun
Дата: 07.01.2012 23:12:01
samun,

ссори таблица съехала
вот нарисовал
Картинка с другого сайта.
Программист-Любитель
Дата: 07.01.2012 23:18:55
1. в с# + SQL server я бы выгрузил данные в массив и посчитал, а патом обратно загрузил в БД а тут не знаю как
Эта и в C# бред не меньший, чем в аксесе. Нужное вам считается запросом. ФАК про нумерацию.

2. Для таблиц есть тэг csv - ничего съезжать не будет.
mds_world
Дата: 08.01.2012 00:32:27
samun,
у вас в запросе и примере таблички разные названия полей. Кстати, картинка с другого сайта недоступна.

Достаточно обычный запрос со сдвигом подойдет
select t1.ТипПродукта, t1.Год, t1.Выручка-t2.Выручка as изменение 
from Таблица t1 inner join Таблица t2 on t1.ТипПродукта=t2.ТипПродукта and t1.Год=t2.Год+1

И кстати. Уберите расчетное поле из таблицы. Оно там ни к чему. Разницу считайте запросом. И обновления не потребуется.
samun
Дата: 08.01.2012 01:13:42
mds_world,

спасибо за ответ правда пока не знаю как его применить ) за картинку прошу извинить

в от что нашел

UPDATE project INNER JOIN [Project Dop] ON project.[Номер проекта] = [Project Dop].[Номер проекта] 
SET [Project Dop].[Рост продаж] = [Project Dop]![Выручка]-
(IIf([Project Dop]![Год]=0,0,DLookUp([Выручка],"[Project Dop]",[Project Dop]![Год]=([Project Dop]![Год]-1) ) ) );


С помощью функции DLookup
DLookup(выражение, подмножество [, условия_отбора] )

вот у меня:
"выражение" - [Выручка]
подмножество - "[Project Dop]"
условия_отбора [Project Dop]![Год]=([Project Dop]![Год]-1)

В файле ссылка база в ней "Запрос2" над которым вожусь
подскажите, пожалуйста где и в чем я не прав?
samun
Дата: 08.01.2012 03:26:22
samun,
дошло что это:
[Project Dop]![Год]=([Project Dop]![Год]-1)
- бред. но вот как сделать что бы внутри IFF [Project Dop]![Год] внутри функции DLookUp отличались this вить не напишешь (
Владимир Саныч
Дата: 08.01.2012 03:30:20
samun
дошло что это:
[Project Dop]![Год]=([Project Dop]![Год]-1)
- бред.

Это хорошо, что дошло. Значит, скоро дойдет, что это: 11869152 - ответ на Ваш вопрос.
samun
Дата: 08.01.2012 04:35:19
Владимир Саныч,

в правильном направлении :
UPDATE [Project Dop] SET [Project Dop].[Рост продаж]  = ( select [t1]![Выручка]-[t2]![Выручка]  
 FROM  [Project Dop]  t1 inner join [Project Dop]  t2 on [t1]![Номер проекта]=[t2]![Номер проекта] and [t1].[Год]=[t2]![Год]+1)


и где я тут не прав
ё
Дата: 08.01.2012 06:07:07
samun
Владимир Саныч,

в правильном направлении :
UPDATE [Project Dop] SET [Project Dop].[Рост продаж]  = ( select [t1]![Выручка]-[t2]![Выручка]  
 FROM  [Project Dop]  t1 inner join [Project Dop]  t2 on [t1]![Номер проекта]=[t2]![Номер проекта] and [t1].[Год]=[t2]![Год]+1)


и где я тут не прав

"не прав" - в том, что храните расчетную величину
все остальные "беды" - от туда ))

но, раз "хотите разбиться" - пожалуйста ))
UPDATE [Project Dop] 
SET [Project Dop].[Рост продаж]  = [Project Dop].[Выручка] - 
  nz(dlookup("[Выручка]","[Project Dop]", "[Номер проекта]=" & [Project Dop].[Номер проекта] & " and [Год]=" & [Project Dop].[Год]-1), 0)
samun
Дата: 08.01.2012 06:48:15
ё
samun
Владимир Саныч,

в правильном направлении :
UPDATE [Project Dop] SET [Project Dop].[Рост продаж]  = ( select [t1]![Выручка]-[t2]![Выручка]  
 FROM  [Project Dop]  t1 inner join [Project Dop]  t2 on [t1]![Номер проекта]=[t2]![Номер проекта] and [t1].[Год]=[t2]![Год]+1)


и где я тут не прав

"не прав" - в том, что храните расчетную величину
все остальные "беды" - от туда ))

но, раз "хотите разбиться" - пожалуйста ))
UPDATE [Project Dop] 
SET [Project Dop].[Рост продаж]  = [Project Dop].[Выручка] - 
  nz(dlookup("[Выручка]","[Project Dop]", "[Номер проекта]=" & [Project Dop].[Номер проекта] & " and [Год]=" & [Project Dop].[Год]-1), 0)


"хотите разбиться" - не совсем понял ?
и еще такой вопрос если в запросе ошибка (при запуске на выполнение запроса, прикрепленная картинка ) как знать где она, в C# можно пошагова запустить, а тут ?