Как избавиться от дублей в запросе? #687912


#0 by Gorr
Имеем справочник из которого необходимо выбрать все элементы без дублей. Критерием дублей будем считать наименование элементов. В результате запроса надо получить два поля наименование и ссылку на элемент справочника. Например содержимое справочника может быть: сидоров Ссылка05 В результате запроса хотим получить: Иванов Ссылка01 Петров Ссылка02 Сидоров Ссылка04 Проблема в том, что запрос Выбрать Наименование ИЗ Справочник.Сотрудники Сгруппировать по Наименование Имеющие Количество (*) > 1 вернет три записи но без ссылки на сами элементы. Проблема в том что Поле Ссылка уникально в пределах справочника и при включении поля в состав выбираемых полей возвращаются все записи.
#1 by Molinor
А почему не: Сидоров Ссылка05 ?
#2 by WildSery
МИНИМУМ(Ссылка), например.
#3 by elCust
По моему изначально задача не корректна.
#4 by WildSery
*некорректна :)
#5 by Ofizer
+1 может быть наоборот выбрать дублей, и принять решение как от них избавиться?
#6 by elCust
Молодец! Разрешаю записать себе +1.
#7 by Ненавижу 1С
ИЗ Справочник.Сотрудники Сгруппировать по Наименование какой вопрос, такой ответ
#8 by WildSery
Можно даже обработку замены дублей порекомендовать. Я не спрашивал разрешения :) Эхо!
#9 by Gorr
Благодарю за МИНИМУМ! На самом деле без разницы какую ссылку выбрать в результат.  Мое дело предложить клиенту варианты решения: Либо алгоритм обрезающий дубли либо предоставить все дубли для принятия решения. Скорее всего заморачиваться с корректировкой дублей просто не захотят (нужно перенести НСИ в другую базу).
#10 by Gorr
Чиста теоретически была еще мысль для выбора какую ссылку взять в результат использовать конструкцию TOP 1, но как это сделать мысль далее не пошла))
#11 by Serginio1
#12 by mikecool
чтобы избавиться от дублей, надо вообще понять как и что выбирается, и тогда все будет просто
#13 by Serginio1
11+
#14 by Gorr
благодарю за развитие мысли. В итоге получилось два решения результаты которых почему-то отличаются. Быть может у кого будут идеи? Вариант1: ВЫБРАТЬ Ссылка, Наименование ИЗ     Справочник.Номенклатура     ВТ_Номенклатура СГРУППИРОВАТЬ ПО Наименование ИМЕЮЩИЕ КОЛИЧЕСТВО(*) > 1 ИЗ ВТ_Номенклатура СГРУППИРОВАТЬ ПО Наименование ИЗ ВТ_Номенклатура ГДЕ НЕ Наименование В (ВЫБРАТЬ * ИЗ ВТ_ДублиНаименований) ОБЪЕДИНИТЬ ; ВЫБРАТЬ Количество(*) из ВТ_РЕЗУЛЬТАТ Вариант2: Поместить ВТ_Номенклатура ИЗ Справочник.Номенклатура как Номенклатура ГДЕ Ссылка В (Выбрать первые 1 Ссылка ИЗ Справочник.Номенклатура как спр где спр.Наименование = Номенклатура.Наименование Упорядочить по Наименование убыв) И Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры) //Упорядочить по Наименование ИЕРАРХИЯ ; Выбрать Количество(*) из ВТ_Номенклатура Так вот количество записей во втором случае получается менее чем в первом.
#15 by Serginio1
СГРУППИРОВАТЬ ПО Наименование ИМЕЮЩИЕ КОЛИЧЕСТВО(*) = 1
#16 by Gorr
Цель здесь получить уникальные записи из списка дублирующихся. См.пост 0. В результат вашего запроса записи с дублинующимися наименованиями не попадут вовсе, что приведет к потере данных.
#17 by Serginio1
Из самого названия ВТ_СсылкиБезДублей должно соответствовать ИМЕЮЩИЕ КОЛИЧЕСТВО(*) = 1
#18 by Gorr
ну уж как назвалось лучше придумать не получилось, но суть - там должны быть ссылки из тех которые дублируются в основной таблице, но в единственном экземпляре
#19 by МимохожийОднако
В УТ10.3 есть штатная обработка по поиску и замене дублей. В т.ч. и по наименованию. Возможно, это лучше лисапеда.
#20 by Gorr
вообще смотрите весь пакет запросов коли речь идет о 1м варианте. шаг 1 понятно что выбираем только те элементы справочника входящие в определенную группу и помещаем результат в ВТ_Номенклатура. Вся дальнейшая работа осуществляется именно с этим отбором. шаг 2 определяем какие наимнования дублируются шаг 3 выбираем из множества дублирующихся записей по одной с каждым наименованием шаг 4 используем объединение. в первой части запроса выбираем все записи кроме дублирующихся. во второй части запроса добавляем по одной из тех которые дублируются (шаг3).
#21 by Gorr
это из другой оперы - замена дублей и ремонт базы здесь и не требуется. речь идет о том что нужно переносить, а что нет.
#22 by Serginio1
В третьем варианте у тебя стоит ИМЕЮЩИЕ КОЛИЧЕСТВО(*) > 1
#23 by Gorr
да, именно эта конструкция позволяет выбрать дубли (те строки где количество строк с одинаковым наименованием встречается в таблице более одоного раза) из общего множества записей. что тут непонятного?
#24 by Gorr
в третьем шаге первого варианта алгоритма, третьего варианта не рассматривалось.
#25 by Serginio1
ВТ_СсылкиБезДублей
#26 by Serginio1
Запросы одинаковые
#27 by Serginio1
Все прошу прощения. Они разные в первом случае Наименование во втором ссылки. Я так понимаю ссылок больше 1 быть не может?
#28 by Gorr
ДА НИФИГА! см пример исходных таблиц из 0. первый возвращает Петров Сидоров второй возвращает Ссылка03 Ссылка05
#29 by Serginio1
28 Точно второй что либо возвращает при условии ИМЕЮЩИЕ КОЛИЧЕСТВО(*) > 1 Судя по первому запросу никаких дублей ссылок быть не должно
#30 by Gorr
ессно having count(*) > 1 это классика жанра. ссылки уникальны по своей природе. мы говорим об элементах с динаковым наименованием. почему вы не можете внимательно прочитать топик?
#31 by Serginio1
Ясно прошу прощения не доконцо досмотрел. Итак ВЫБРАТЬ Наименование ПОМЕСТИТЬ ВТ_ДублиНаименований ИЗ     ВТ_Номенклатура СГРУППИРОВАТЬ ПО Наименование ИМЕЮЩИЕ КОЛИЧЕСТВО(*) > 1 ; выбирает дубли наименований ИЗ ВТ_Номенклатура СГРУППИРОВАТЬ ПО Наименование ИМЕЮЩИЕ КОЛИЧЕСТВО(*) > 1 ; Этот запрос аналогичный первому, только еще есть поле Ссылка. Сделай второй запрос на ИМЕЮЩИЕ КОЛИЧЕСТВО(*) = 1 и получишь однинаковое количество с Выбрать Ссылка Поместить ВТ_Номенклатура ИЗ Справочник.Номенклатура как Номенклатура ГДЕ Ссылка В (Выбрать первые 1 Ссылка ИЗ Справочник.Номенклатура как спр где спр.Наименование = Номенклатура.Наименование Упорядочить по ссылка убыв) И Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры) Упорядочивать по наименованию нет смысла, так как стоит условие спр.Наименование = Номенклатура.Наименование
#32 by Serginio1
Ссылка в ИЕРАРХИИ (&ГруппаНоменклатуры) СГРУППИРОВАТЬ ПО Наименование должно выдать то же что и Выбрать Номенклатура.Наименование,Номенклатура.Ссылка ИЗ Справочник.Номенклатура как Номенклатура ГДЕ Ссылка В (Выбрать первые 1 Ссылка ИЗ Справочник.Номенклатура как спр где спр.Наименование = Номенклатура.Наименование Упорядочить по Наименование убыв) И Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры)
#33 by GANR
>как избавиться от дублей в запросе легко :)
#34 by Sammo
3 варианта избавлния от дублей 1. distinct 2. группирующие функции 3. а ля срез последних
#35 by Gorr
Вопрос можно считать закрытым. По первому варианту все корректно перенеслось.
#36 by Serginio1
Ты для начала сравни первый и второй вариант на полное объединение по наименованию и посмотри различия.
#37 by Gorr
в итоге получилось так:
#38 by dk
всю ветку не читал, но чем отличается от ?
#39 by Gorr
да ничем. ваш вариант и оставлю. поздравляю!
#40 by WildSery
Вот тебе 100 рублей на молоко, а вот 100 рублей на хлеб. Смотри, не перепутай! Найди отличия от первых пяти ответов.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С