|
Вернуть неповторяющиеся сочетания для связанных пар через запрос | ☑ | ||
---|---|---|---|---|
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 ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_результат.СС КАК СС, ВТ_результат.Ном КАК Ном ИЗ ВТ_результат КАК ВТ_результат ГДЕ (ВТ_результат.СС <= ВТ_результат.Ном ИЛИ НЕ ВТ_результат.ЕстьПара) УПОРЯДОЧИТЬ ПО СС, Ном |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |