|   |   | 
| 
 | Вернуть неповторяющиеся сочетания для связанных пар через запрос | ☑ | ||
|---|---|---|---|---|
| 0
    
        maskitone 08.08.19✎ 22:49 | 
        Доброго! 
 Нужна помощь, уже мозг сломал. Имеется: в справочнике номенклатуры в ТЧ прописаны аналоги в виде ссылки на другую номенклатуру. Записи зеркальные, т.е. в номенклатуре 1 указана номенклатура 2, а в номенклатуре 2 - номенклатура 1. т.е получается поле аналогов, где каждый аналог указан у каждого аналога. Надо: получить запросом (только запросом, т.к. там отчет на СКД) таблицу аналогов состоящую из двух колонок (номенклатура и аналог), но только по одной (любой) номенклатуре из каждого "поля" аналогов, а не по всему полю. Надо для группировки номенклатуры к "заказу" в отчетах по продажам и закупкам. В чем сложность: допустим есть 3 номенклатуры. Запросом ТЧ аналогов можно получить таблицу пар аналогов, но связи в ней будут дублироваться (зеркально): 1-1 1-2 1-3 2-1 2-2 2-3 3-3 3-1 3-2 А мне на выходе надо получить: 1-1 1-2 1-3 или 2-1 2-2 2-3 или 3-1 3-2 3-3. | |||
| 1
    
        Йохохо 08.08.19✎ 22:59 | 
        и код больше     | |||
| 2
    
        RomanYS 08.08.19✎ 23:01 | 
        (0) Если наличие зеркальных записей гарантировано и надо только их убрать, то:
 "где спр.Ссылка <= Аналоги.Аналог" только получишь 1-1 1-2 1-3 2-2 2-3 3-3 | |||
| 3
    
        RomanYS 08.08.19✎ 23:03 | 
        Судя по примерам тебе надо
 выбрать минимум(ТЧ.Ссылка), ТЧ.Аналог ИЗ Справочник.Номенклатура.Аналоги как ТЧ сгруппировать по ТЧ.Аналог | |||
| 4
    
        RomanYS 08.08.19✎ 23:04 | 
        +(3) но наличие зеркальных записей тоже обязательно     | |||
| 5
    
        assasu 09.08.19✎ 04:19 | 
        (0) придумай новый показатель, который есть результат любой пары типа чч-зз.
 но придумай его так что бы показатель 1-2 = показатель 2-1. потом по этому показателю группируй | |||
| 6
    
        fgaabbb 09.08.19✎ 04:33 | 
        отсортировать, меняя местами первую номенклатуру и вторую ("выбор когда ..."), к примеру, по коду номенклатуры, потом выбрать различные, не?     | |||
| 7
    
        Ботаник Гарден Меран 09.08.19✎ 08:42 | 
        ВЫБРАТЬ 1 КАК П1,1 КАК П2
 ПОМЕСТИТЬ ВТ ОБЪЕДИНИТЬ ВЫБРАТЬ 1,2 ОБЪЕДИНИТЬ ВЫБРАТЬ 1,3 ОБЪЕДИНИТЬ ВЫБРАТЬ 2,1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2,2 ОБЪЕДИНИТЬ ВЫБРАТЬ 2,3 ОБЪЕДИНИТЬ ВЫБРАТЬ 3,3 ОБЪЕДИНИТЬ ВЫБРАТЬ 3,1 ОБЪЕДИНИТЬ ВЫБРАТЬ 3,2 ; ВЫБРАТЬ ВТ.П1 КАК П1, ВТ.П2 КАК П2, ВЫБОР КОГДА ВТ_Зеркало.П1 ЕСТЬ NULL ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ КАК ЕстьПара ПОМЕСТИТЬ ВТ_Результат ИЗ ВТ КАК ВТ ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ_Зеркало ПО ВТ.П1 = ВТ_Зеркало.П2 И ВТ.П2 = ВТ_Зеркало.П1 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_Результат.П1 КАК П1, ВТ_Результат.П2 КАК П2 ИЗ ВТ_Результат КАК ВТ_Результат ГДЕ (ВТ_Результат.П1 <= ВТ_Результат.П2 ИЛИ НЕ ВТ_Результат.ЕстьПара) | |||
| 8
    
        maskitone 09.08.19✎ 11:40 | 
        (2) нет, на выходе получается что в первой колонке выборки не только ссылка, но и его аналоги.     | |||
| 9
    
        maskitone 09.08.19✎ 12:02 | 
        (7) на выходе имеем
 1-1 1-2 1-3 2-2 2-3 3-3 | |||
| 10
    
        Ботаник Гарден Меран 09.08.19✎ 13:31 | 
        (9)
 А что, вам травка животик не щекочет? (С) | |||
| 11
    
        Cyberhawk 09.08.19✎ 13:56 | 
        Бывает еще, что аналоги не взаимозаменяемы. Т.е. товар2 является аналогом товара1, а товар1 не является аналогом для товара2 :)     | |||
| 12
    
        maskitone 09.08.19✎ 14:23 | 
        (10) смешно, да)
 мне надо выбрать результаты только любой одной номенклатуры из всего "поля" аналогов с прописанными для нее аналогами во второй колонке , ваш запрос этого не дает. Спасибо за предложение, но это факт) | |||
| 13
    
        maskitone 09.08.19✎ 14:24 | 
        (11) Бывает, у меня такого нет)     | |||
| 14
    
        Ботаник Гарден Меран 09.08.19✎ 14:26 | 
        (12)
 GIGO Garbage In - Garbage Out ЗЫ. Где П1 = &П1 | |||
| 15
    
        maskitone 09.08.19✎ 15:20 | 
        (14) Читай внимательно описание проблемы)     | |||
| 16
    
        maskitone 09.08.19✎ 15:56 | 
        (7) все оказалось просто - надо было добавить МИНИМУМ из (3) :
 ВЫБРАТЬ МИНИМУМ(ВТ.СС) КАК СС, ВТ.Ном КАК Ном, ВЫБОР КОГДА ВТ_Зеркало.СС ЕСТЬ NULL ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ КАК ЕстьПара ПОМЕСТИТЬ ВТ_результат ИЗ ВТ КАК ВТ ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ_Зеркало ПО (ВТ.СС = ВТ_Зеркало.Ном) И (ВТ.Ном = ВТ_Зеркало.СС) СГРУППИРОВАТЬ ПО ВТ.Ном, ВЫБОР КОГДА ВТ_Зеркало.СС ЕСТЬ NULL ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_результат.СС КАК СС, ВТ_результат.Ном КАК Ном ИЗ ВТ_результат КАК ВТ_результат ГДЕ (ВТ_результат.СС <= ВТ_результат.Ном ИЛИ НЕ ВТ_результат.ЕстьПара) УПОРЯДОЧИТЬ ПО СС, Ном | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |