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

Откуда:
Сообщений: 2
Как в отчете MS Access 2003 реализовать следующее условие:
повтор последней не нулевой записи в обратную сторону
Пример:
Есть поле A:
1
0
0
4
0
6

То поле В должно выглядеть:
1
4
4
4
6
6

Т.е. идет повтор последней не нулевой записи в обратную сторону

Примечание: Поле А было получено из поля пронумерованного по порядку:
1
2
3
4
5
6
16 дек 05, 08:51    [2177464]     Ответить | Цитировать Сообщить модератору
 Re: Повтор последней не нулевой записи в обратную сторону  [new]
paparome
Member

Откуда: Москва
Сообщений: 4312
1. Надо ввести признак сортировки, т.к. Вы не сможете ни одной СУБД объяснить чем отличается:
1 2 3
от
3 1 2 (написал в строчку чтобы меньше места занимало)

в вашем случае
1 0 0 4 0 6
не отличамо от
0 0 0 1 4 6

Это раз!!!
Пусть для сортировки используется некоторое поле id (упорядоченно по возрастанию)

2. Далее алгоритм примерно такой:
- для каждого id (as id1) находим минимально id (as id2) такое что: id1 <= id2 и поле А соответсвующее id2 не пустое (в вашем случае не равно 0)
- по найденному id2 вытаскиваем поле А

Приведу 2 варианта реализации:
- можно написать фкнцию, которая будет проделывать указанную операцию по заданному id1
function xxx(byval id1 as long) as variant
dim ret as variant
  ret = DMin("id", "Tbl", id1 & "<=id And A<>0")
  ret = DLookUp("A", "Tbl", "id=" & ret)
  xxx = ret
end function
Select id, A, xxx(id) as B From Tbl

- Можно чисто на SQL
Для просторы введем несколько ограничений: А>=0 и А<10000
Select T1.id, T1.A, Min(T2.B) % 10000 as B
From Tbl as T1 Inner Join
(Select id, id*10000+A as B From Tbl Where A<>0) as T2
On T1.id <= T2.id
Group By T1.id, T1.A

???
16 дек 05, 16:32    [2180203]     Ответить | Цитировать Сообщить модератору
 Re: Повтор последней не нулевой записи в обратную сторону  [new]
paparome
Member

Откуда: Москва
Сообщений: 4312
PS:
Min(T2.B) % 10000
читать как
Min(T2.B) mod 10000

Ну перепутал с T-SQL
16 дек 05, 16:38    [2180248]     Ответить | Цитировать Сообщить модератору
 Re: Повтор последней не нулевой записи в обратную сторону  [new]
kasak
Member

Откуда:
Сообщений: 2
Проблема в том, что это надо реализовать в "отчете", где поле A - вычисляемое поле, которого нет в таблицах или запросах базы
17 дек 05, 01:09    [2181672]     Ответить | Цитировать Сообщить модератору
 Re: Повтор последней не нулевой записи в обратную сторону  [new]
Bor-L
Member

Откуда: Земляной вал
Сообщений: 406
kasak
Проблема в том, что это надо реализовать в "отчете", где поле A - вычисляемое поле, которого нет в таблицах или запросах базы


т.е. проблема не в том, чтобы добежать, а добежать в мешке... :)
19 дек 05, 09:30    [2184277]     Ответить | Цитировать Сообщить модератору
 Re: Повтор последней не нулевой записи в обратную сторону  [new]
paparome
Member

Откуда: Москва
Сообщений: 4312
kasak
Проблема в том, что это надо реализовать в "отчете", где поле A - вычисляемое поле, которого нет в таблицах или запросах базы

Написать функциию (как я и говорил), только барат значение А не из таблицы, а вычислять
В функциях вычисления никто не отменял
19 дек 05, 09:34    [2184285]     Ответить | Цитировать Сообщить модератору
 Re: Повтор последней не нулевой записи в обратную сторону  [new]
Bor-L
Member

Откуда: Земляной вал
Сообщений: 406
а бегать по строкам отчета "в обратную сторону" не получится, хотя, конечно жаль (при формировании строки в области данных отчета доступна только текущая строка (для изменения) и все предыдущие (если как-то сохранять, для справки), но никоим образом не последующая) ИМХО
19 дек 05, 10:05    [2184375]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить