Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Подсчитать... / 15 сообщений из 15, страница 1 из 1
21.05.2004, 22:45
    #32529087
Invisible
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать...
Как бы побыстрее подсчитать количество записей в группах, проставляя в каждой записи общее кол-во в группе? Только не dcount - уж больно долго.

Даже не знаю, что быстрее будет, dcount или идти по рекордсету увеличивая переменную на единицу, а при смене группы, возвращаться на начало предыдущей и быстренько проставлять итоговое значение.

Оба варианта тормознутые. Может есть еще каки-нить варьянты???
...
Рейтинг: 0 / 0
21.05.2004, 22:50
    #32529091
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать...
Открыть рекордсет с группировкой, идти по нему, в каждой записи сразу брать количество и запускать апдейт.
...
Рейтинг: 0 / 0
21.05.2004, 23:21
    #32529103
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать...
Не понятно, для чего это надо, но уж если надо :)
Код: plaintext
1.
2.
select * ,
      (select count(*)  from myTable t2 where t2.id=t1.id)  as Num
from myTable t1
...
Рейтинг: 0 / 0
22.05.2004, 00:23
    #32529124
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать...
А потом идти по этому рекордсету и делать апдейт в каждой записи? Имхо, запускать апдейт через SQL погруппно будет быстрее.
...
Рейтинг: 0 / 0
22.05.2004, 00:39
    #32529126
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать...
Кто-то из нас , что-то не понял

InvisibleКак бы побыстрее подсчитать количество записей в группах, проставляя в каждой записи общее кол-во в группе? Только не dcount - уж больно долго.
Нигде не сказано, что надо проапдейтить исходную таблицу.
P.S Для красоты восприятия надо бы конечно добавать в конец запроса ORDER BY t1.id
...
Рейтинг: 0 / 0
22.05.2004, 00:42
    #32529127
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать...
VIG,
проставляя в каждой записи- это разве не
проапдейтить исходную таблицу?
...
Рейтинг: 0 / 0
22.05.2004, 00:44
    #32529128
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать...
Вот, нашел подтверждение.

автора при смене группы, возвращаться на начало предыдущей и быстренько проставлять итоговое значение
- это точно значит, что нужно заносить значения физически в таблицу.
...
Рейтинг: 0 / 0
22.05.2004, 00:51
    #32529132
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать...
Саныч, что надо на самом деле знает только автор вопроса.
...
Рейтинг: 0 / 0
22.05.2004, 00:52
    #32529133
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать...
Да вообще все в мире относительно и мир непознаваем...
...
Рейтинг: 0 / 0
22.05.2004, 00:58
    #32529136
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать...
А вот тут полностью с тобой согласен. :)
...
Рейтинг: 0 / 0
22.05.2004, 14:27
    #32529283
Invisible
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать...
"Открыть рекордсет с группировкой, идти по нему, в каждой записи сразу брать количество и запускать апдейт."

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

А через SQL действительно работало быстрее, только тот запрос создавал таблицу, а теперь ему нужно апдейтить, а он только и пишет что запрос должен быть обновляемым. Вот он (точнее они :)

Первый запрос выделяет количества предложений по позиции (предложение - это там где отсутствует фирма поставщик)

SELECT РабТаб.[Код детали] AS Код, Count(РабТаб.[Код детали]) AS Кол
FROM РабТаб
WHERE (((РабТаб.[Фирма поставщик]) Is Null))
GROUP BY РабТаб.[Код детали];

Второй берет количества без предложений.

SELECT РабТаб.[Код детали], Count(РабТаб.[Код Детали])-IIf(IsNull(ПодчКол.Кол),0,ПодчКол.Кол) AS [Count-Детали]
FROM РабТаб LEFT JOIN ПодчКол ON РабТаб.[Код Детали] = ПодчКол.Код
GROUP BY РабТаб.[Код Детали], ПодчКол.Кол;

А третий обновляет записи.
UPDATE РабТаб INNER JOIN КолПредл ON РабТаб.[Код Детали] = КолПредл.[Код Детали] SET РабТаб.[Count-Детали] = [КолПредл]![Count-Детали];

НО, НО и еще раз НО. ТРЕТИЙ ЗАПРОС ПИШЕТ, ЧТО В ОПЕРЦИИ ДОЛЖЕН ИСПОЛЬЗОВАТЬСЯ ОБНОВЛЯЕМЫЙ ЗАПРОС.
Вот.

А таблицу, конечно, нужно обновлять...
...
Рейтинг: 0 / 0
22.05.2004, 14:42
    #32529292
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать...
автор"Открыть рекордсет с группировкой, идти по нему, в каждой записи сразу брать количество и запускать апдейт."

В смысле имеется ввиду, что на каждую группу открывать рекордсет и брать количества записей?????? :)
Нет. Открыть рекордсет - это значит открыть один рекордсет. Идти по нему - это значит идти по нему при помощи MoveNext.
...
Рейтинг: 0 / 0
22.05.2004, 14:57
    #32529299
Invisible
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать...
Ну да, то есть при переходе на каждую группу просто запоминать значение dcount в переменной и ставить ее в кажной записи, так? Если так, то это вечнось и есть.

UPDATE РабТаб SET РабТаб.[Count-Деталь] = DCount("*","РабТаб","[Фирма поставщик]<>'' and [Код Детали]=" & [Код Детали]);

Это тоже вечность :)

А побыстрее?
...
Рейтинг: 0 / 0
22.05.2004, 15:03
    #32529306
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать...
Не нужно dcount. Я же сказал - запрос с группировкой.

select dd, count(*) as cc from ... group by dd

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

ccvar=rs!cc
ddvar=rs!dd
currentdb.execute "update ... set ...=" & cstr(ccvar) & " where dd=" & cstr(ddvar)

Он одной командой проапдейтит всю группу.
...
Рейтинг: 0 / 0
22.05.2004, 16:19
    #32529348
Invisible
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать...
Владимир Саныч, спасибо. Это оно!
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Подсчитать... / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]