Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Счёт нарастающим итогом по параметру / 8 сообщений из 8, страница 1 из 1
19.11.2015, 18:40
    #39108144
Sberban4eg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счёт нарастающим итогом по параметру
Товарищи, помогите, пожалуйста, сделать такую штуку в Access 2010:
Имеется таблица с двумя полями:
ID Сотрудника Дата
1 02.02.2015
1 03.02.2015
1 04.02.2015
2 02.02.2015
2 03.02.2015
2 04.02.2015
2 05.02.2015

Необходимо вывести поле с подсчётом количества дат по сотруднику по каждой строке, т.е. должно получиться следующее:
Сотрудник Дата Счётчик
1 02.02.2015 1
1 03.02.2015 2
1 04.02.2015 3
2 02.02.2015 1
2 03.02.2015 2
2 04.02.2015 3
2 05.02.2015 4

Сотрудников достаточно много, дат тоже, т.е. прописывать вручную ID сотрудника не комильфо.
Есть ли функция для этих дел?
Пробовал через DCount, но это совсем не то, он просто считает количество.
Заранее благодарен.
...
Рейтинг: 0 / 0
19.11.2015, 20:16
    #39108262
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счёт нарастающим итогом по параметру
попробуй в сторону суммы с накоплением покопать. вводишь столбец со значением 1 и от него прыгаешь. По сумме с накоплением здесь http://www.sql.ru/forum/99580/summa-s-nakopleniem
...
Рейтинг: 0 / 0
20.11.2015, 08:40
    #39108520
guest_rusimport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счёт нарастающим итогом по параметру
...
Рейтинг: 0 / 0
23.11.2015, 18:06
    #39111343
Sberban4eg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счёт нарастающим итогом по параметру
Значит написал я как советовали в указанных постах функцию:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public Function Numeration(Optional var As String) As Long
Static n As Long
Static fam As String
If IsMissing(var) Then
n = 0
Else
If fam = var Then
n = n + 1
Else
n = 1
End If
End If
Numeration = n
fam = var
End Function



И запрос:
Код: sql
1.
2.
SELECT DISTINCT [Таблица].[ID_сотрудника] & "-" & Numeration([Id_сотрудника]) AS num
FROM Таблица;




И значит считает он, собака, по разному, в одном случае по нескольку раз одно и тоже, в другом считает не все ID.
Зависит от того, выводишь дату и ID в запрос или нет.

Можете подсказать, где я не так делаю.

Заранее благодарен!
...
Рейтинг: 0 / 0
23.11.2015, 22:29
    #39111523
guest_rusimport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счёт нарастающим итогом по параметру
Sberban4eg,
на примере ваших данных в первом сообщении
...
Рейтинг: 0 / 0
24.11.2015, 07:02
    #39111602
Счёт нарастающим итогом по параметру
guest_rusimportSberban4eg,
на примере ваших данных в первом сообщении
Если в таблице Лист1 поменять местами значения в Поле1 для 2-ой и 5-ой записи
Поле1Поле2102.02.2015203.02.2015104.02.2015202.02.2015103.02.2015204.02.2015205.02.2015
то набор записей не изменится, но результат работы Запрос5 ...
Поле1Поле2num102.02.20151103.02.20151104.02.20151202.02.20151203.02.20151204.02.20151205.02.20152
Здесь сказывается то, что внешний запрос (в данном случае Запрос5) не гарантировано обрабатывает записи вложенного запроса (в данном случае Запрос4) в порядке указанном предложением ORDER BY вложенного запроса. Ситуацию можно поправить, дополнив Запрос4 предикатом TOP
Код: sql
1.
2.
3.
SELECT TOP 100 PERCENT Лист1.Поле1, Лист1.Поле2
FROM Лист1
ORDER BY Лист1.Поле1, Лист1.Поле2



Замечание. Документального подтверждения сказанному в предыдущем абзаце в Access не нашел. Хотя, насколько помню, в T-SQL именно так.
...
Рейтинг: 0 / 0
24.11.2015, 08:39
    #39111639
guest_rusimport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счёт нарастающим итогом по параметру
-Практикант-,

Спасибо, буду иметь ввиду
...
Рейтинг: 0 / 0
25.11.2015, 15:55
    #39113297
Sberban4eg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Счёт нарастающим итогом по параметру
Товарищи, большое вам человеческое спасибо!

Кому интересно получилось так:
Исходная таблица называется таблица1 (поля: ID_сотрудника, Дата)
Необходимо сделать промежуточный запрос, где отсортировать по порядку оба поля, приводить пример не буду, т.к. понятно как это. это запрос1.

Далее прописываем функцию Numeration. Пример указан выше.

И делаем итоговый запрос:

SELECT TOP 100 PERCENT запрос1.ID_сотрудника, запрос1.Дата, numeration([ID_сотрудника])
FROM запрос1
WHERE (((IsNull([ID_сотрудника]))=False))
ORDER BY запрос1.ID_сотрудника, запрос1.Дата;

Предложенный в одном из вариантов Distinct тут приведёт к некорректной работе.
ВАЖНО: При каждом перезапуске (если переходить из режима конструктора в режим таблицы данные в поле num постоянно "играют").
В итоге сделал создание таблицы на основании вышеуказанного запроса. Всё работает. Всем ещё раз спасибо!

Практикант-

Кстати TOP можно поставить в итоговый запрос, тоже работает.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Счёт нарастающим итогом по параметру / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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