Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 08.12.2016
Сообщений: 9

Нумерация дубликатов в колонке запроса

12.12.2016, 00:31. Показов 2614. Ответов 7

Студворк — интернет-сервис помощи студентам
Добрый день, уже обыскал "весь" интернет. Нашёл несколько решений, но то ли они мне не подходят, то ли я не сумел ими воспользоваться, поэтому спрашиваю под конкретно мой случай(в Access просто только недавно начал разбираться):

У меня есть запрос:
SQL
1
2
3
4
5
6
7
8
SELECT 
[Short Parameters 2G].GBSSFUNCTION, 
[Short Parameters 2G].GBTSSITEMANAGER, 
[Short Parameters 2G].GGSMCELL, 
[Short Parameters 3G].CellName, 1 AS Expr1, 
"255,3," & [URNCFUNCTION] & "," & [CID] AS Expr2, 
[GBTSSITEMANAGER] & [GGSMCELL] & [UARFCNDL] & [PRIMARYSCRAMBLINGCODE] AS CheckDub
FROM ([Short Parameters 2G] INNER JOIN [3G-2G Neighbors] ON ([Short Parameters 2G].CELLIDENTITY = [3G-2G Neighbors].[Target CI]) AND ([Short Parameters 2G].LAC = [3G-2G Neighbors].[Target LAC])) INNER JOIN [Short Parameters 3G] ON ([3G-2G Neighbors].[Cell ID] = [Short Parameters 3G].CID) AND ([3G-2G Neighbors].[RNC ID] = [Short Parameters 3G].URNCFUNCTION);
Выглядят результаты так:
Code
1
2
3
4
5
6
7
GBSSFUNCTION    GBTSSITEMANAGER GGSMCELL    CellName    Expr1            Expr2       CheckDub
1315                            18311               1           UD0668E1       1    255,3,311,11065 18311110812420
1315                            28311               1           UD0668F1       1    255,3,311,11065 28311110812420
1315                            19691               1           UI0839G3       1    255,3,311,11065 19691110812420
1315                            18311               3           UI0839E3       1    255,3,311,11065 18311310812420
1315                            29031               3           UD0668G1       1    255,3,311,11065 29031310812420
1315                            9451                        7           UD0668E1       1    255,3,311,11065 9451710812420
Мне нужно чтобы была еще одна колонка например называлась Count_CheckDub, где бы была нумерация уникальных значений. Если проще то мне нужен аналог функции Excel COUNTIF когда через закрепление ты можешь променуровать дубликаты - =COUNTIF($B$1:B2,B2).

Результат должен выглядеть так:

Code
1
2
3
4
5
6
7
GBSSFUNCTION    GBTSSITEMANAGER GGSMCELL    CellName    Expr1            Expr2       CheckDub       Count_CheckDub
1315                            18311               1           UD0668E1       1    255,3,311,11065 28311110812420         1
1315                            28311               1           UD0668F1       1    255,3,311,11065 28311110812420         2
1315                            19691               1           UI0839G3       1    255,3,311,11065 28311110812420         3
1315                            18311               3           UI0839E3       1    255,3,311,11065 18311310812420         1
1315                            29031               3           UD0668G1       1    255,3,311,11065 29031310812420         1
1315                            9451                        7           UD0668E1       1    255,3,311,11065 29031310812420         2
Т.к. мне нужен подсчёт дубликатов в нескольких местах моей БД, то нужно универсальное решение. И еще - я не могу добавлять в исходные таблицы что-то, т.к. исходные таблицы это дампы, которые обновляются каждую ночь и мои запросы основаны на этом - чтоб иметь всегда актуальную информацию и работать с ней, а работать и менять нужно каждый день.

На основе подсчета дубликатов я сделаю либо их удаление либо выберу нужное мне кол-во.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.12.2016, 00:31
Ответы с готовыми решениями:

Нумерация результатов запроса
Имеется MS SQL Server 7.0. Пусть запрос SELECT name1 FROM table1 выдает такие результаты: AAA CCC BBB

Нумерация строк запроса
Как можно реализовать последовательную нумерацию строк запроса и вывести ее в первое поле строки? Спасибо!

Нумерация строк запроса
Здрастуйте, Необходимо пронумеровать строки таким образом строка1 1 строка2 2 строка3 3 строка4 4 строка5 1 строка6 2 ...

7
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
12.12.2016, 07:55
Не уерена, что правильно поняла по вашему пимеру,
1) дубликат по какому столбцу вы проверяете. Только CheckDub?
2) в каком столбце находится уникальный идентификатор? GGSMCELL?

Без уникального кода строки пронумеровать вообще нельзя: в базе данных строки равноправны, у них нет порядка, кроме опеделяемого данными.

Сохраните ваш исходный запрос под каким-то именем, например TmpQry.

SQL
1
2
3
SELECT TmpQry.*, 
  DCount("GGSMCELL","TmpQry","GGSMCELL<='" & GGSMCELL & "' AND CheckDub ='" & CheckDub & "'") AS Count_CheckDub
FROM TmpQry
Добавлено через 2 минуты
Оговорка: Чем больше записей, тем сильнее будет тормозить. Рост экспоненциальный.
0
0 / 0 / 0
Регистрация: 08.12.2016
Сообщений: 9
12.12.2016, 08:45  [ТС]
В том то и дело что уникального идентификатора в данных нет - получается средствами Access этого нельзя сделать?
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
12.12.2016, 09:45
Не совсем понятно, но можно предположить, что порядковая нумерация на параметре CheckDub. Тогда если задать сортировку запроса по CheckDub, то можно использовать простенькую функцию
Visual Basic
1
2
3
4
5
6
7
8
9
10
Public Function numerCheck(CurValue)
    Static cv, inum
    If cv <> CurValue Then
        inum = 1
        cv = CurValue
    Else
        inum = inum + 1
    End If
    numerCheck = inum
End Function
В запросе надо вставить первичное обнуление переменных в функции (они Static) и сортировку
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT 
[Short Parameters 2G].GBSSFUNCTION, 
[Short Parameters 2G].GBTSSITEMANAGER, 
[Short Parameters 2G].GGSMCELL, 
[Short Parameters 3G].CellName, 1 AS Expr1, 
"255,3," & [URNCFUNCTION] & "," & [CID] AS Expr2, 
[GBTSSITEMANAGER] & [GGSMCELL] & [UARFCNDL] & [PRIMARYSCRAMBLINGCODE] AS CheckDub,
 
numerCheck(CheckDub) AS Count_CheckDub
 
FROM ([Short Parameters 2G] INNER JOIN [3G-2G Neighbors] ON ([Short Parameters 2G].CELLIDENTITY = [3G-2G Neighbors].[Target CI]) AND ([Short Parameters 2G].LAC = [3G-2G Neighbors].[Target LAC])) INNER JOIN [Short Parameters 3G] ON ([3G-2G Neighbors].[Cell ID] = [Short Parameters 3G].CID) AND ([3G-2G Neighbors].[RNC ID] = [Short Parameters 3G].URNCFUNCTION)
WHERE numerCheck(НевозможноеЗначение)=НевозможноеЗначение
ORDER BY 6
НевозможноеЗначение это некоторое значение которое никогда не встретится в CheckDub. Например -99999

Добавлено через 2 минуты
В связи с тем, что переменные Static, они могут меняться во время просмотра запроса. Выход - загонять запрос в во временную таблицу: Select ... Into TempTable
2
0 / 0 / 0
Регистрация: 08.12.2016
Сообщений: 9
12.12.2016, 10:14  [ТС]
Нет, CheckDub это не порядковая нумерация, это я из нескольких колонок изначальных данных слепил одну, т.к. такие конфигурации строк не должны повторяться, но повторения возникают и будут возникать поэтому и ищу способ отлова дубликатов.
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
12.12.2016, 10:30
Saksenov, не имеет значения сколькими параметрами определяется уникальность записи. Вставьте в функцию столько переменных, сколько требуется для определения уникальности. Например для 3 полей
Visual Basic
1
2
3
4
5
6
7
8
9
10
Public Function numerCheck(CurValue1, CurValue2, CurValue3)
    Static cv1,cv2,cv3, inum
    If cv1 <> CurValue1 or cv2 <> CurValue2 or cv3 <> CurValue3 Then
        inum = 1
        cv = CurValue: cv2 = CurValue2: cv3 = CurValue3
    Else
        inum = inum + 1
    End If
    numerCheck = inum
End Function
Но при этом обязательно сделать сортировку запроса по перечисленным аргументам функции
1
0 / 0 / 0
Регистрация: 08.12.2016
Сообщений: 9
12.12.2016, 16:37  [ТС]
mobile, Не получается почему-то воспользоваться - я вставил ваш код в модуль, вывел модуль в критерий и указал по каким трём колонкам колонкам ориентироваться на уникальность. Но выдаёт ошибку: Undefined function 'numerCheck' in expression. Подскажите пожалуйста что я делаю не так.
Миниатюры
Нумерация дубликатов в колонке запроса  
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
12.12.2016, 20:45
Ну или забыли откомпилировать и сохранить модуль, или вставили фнкцию не в общий модуль, а в модуль формы/отчета, или забыли объявить функцию публичной, или опечатка в имени.

Публичные функции из общего модуля запросы должны видеть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.12.2016, 20:45
Помогаю со студенческими работами здесь

Необходимо написать три запроса, на суммирование, выборку и удаление дубликатов
Прошу, помочь в составлении запросов, так как времени почти не осталось, и сдать их нужно сегодня. Молю вас, замечательные умы...

Ввести имя-фамилию в 1 колонке, з/п во 2 колонке, в третьей указать премию
Добрый день,помогите решить задание есть 5 работников нужно ввести их имя-фамилию в 1 колонке и заработную плату во 2 колонке в...

В каждой колонке под таблицей прописать сколько раз в этой колонке встречаются определенные колонки
Внизу прикреплен рисунок с таблицей excel. Цветами обозначены ячейки в которых в двух колонках подряд идут какие-то не нулевые значения. ...

Объединить ячейки в колонке В, так же как в колонке А
Добрый день. Столкнулся с проблемой. Интересует решение, хотя бы с логической стороны (код сам потом настрочу) Есть Excel файл....

Удаление дубликатов
Есть таблица в DataGridview с 3 столбцами. Как сделать удаление повторяющихся строк(ячейки равны по всем 3 столбцам)?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru