связь в запросе с условием

1. EvgeniyNP 11.11.20 18:23 Сейчас в теме
Здравствуйте!
Делаю запрос и немного туплю. первая часть запроса это временная таблица в которой есть несколько документов разных типов.
вторая часть я связываю таблицу с регистром сведений. в регистре есть несколько записей. в качестве измерения у него выступают документы, а ресурс один. в данном случае три записи, в каждой разный документ, в измерении один договор. все эти три документа есть во временной таблице.
Когда в связи пишу
ВЫБОР
				КОГДА НЕ ЗакупкиПринятыеОбязательства.Закупка = ВременнаяТаблица.Лот
					ТОГДА ЗакупкиПринятыеОбязательства.Закупка = ВременнаяТаблица.Лот
				ИНАЧЕ ВЫБОР
						КОГДА НЕ ЗакупкиПринятыеОбязательства.Закупка = ВременнаяТаблица.Закупка
							ТОГДА ЗакупкиПринятыеОбязательства.Закупка = ВременнаяТаблица.Закупка
						ИНАЧЕ ВЫБОР
								КОГДА НЕ ЗакупкиПринятыеОбязательства.Закупка = ВременнаяТаблица.РеестрКонтрактов
									ТОГДА ЗакупкиПринятыеОбязательства.Закупка = ВременнаяТаблица.РеестрКонтрактов
								ИНАЧЕ ВЫБОР
										КОГДА НЕ ЗакупкиПринятыеОбязательства.Закупка = ВременнаяТаблица.Контракт
											ТОГДА ЗакупкиПринятыеОбязательства.Закупка = ВременнаяТаблица.Контракт
									КОНЕЦ
							КОНЕЦ
					КОНЕЦ
			КОНЕЦ
Показать


то договор не выводится.

если пишу такое
(ВременнаяТаблица.Лот = ЗакупкиПринятыеОбязательства.Закупка
				ИЛИ ВременнаяТаблица.Закупка = ЗакупкиПринятыеОбязательства.Закупка
				ИЛИ ВременнаяТаблица.РеестрКонтрактов = ЗакупкиПринятыеОбязательства.Закупка
				ИЛИ ВременнаяТаблица.Контракт = ЗакупкиПринятыеОбязательства.Закупка


то выводится несколько записей.
как лучше сделать условие, чтобы выводилась одна запись?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. spacecraft 11.11.20 18:30 Сейчас в теме
(1)
ВЫБОР
КОГДА НЕ ЗакупкиПринятыеОбязательства.Закупка = ВременнаяТаблица.Лот
ТОГДА ЗакупкиПринятыеОбязательства.Закупка = ВременнаяТаблица.Лот

Вы понимаете что это тоже самое, что и
ВЫБОР
                КОГДА НЕ ЗакупкиПринятыеОбязательства.Закупка = ВременнаяТаблица.Лот
                    ТОГДА Ложь

Ну и так далее с другими условиями.
4. user705522_constantin_h 37 11.11.20 18:31 Сейчас в теме
(1)В первом случае все условия НЕ, а во втором равенство. Чтобы было одно и тоже во втором должно быть:
НЕ (ВременнаяТаблица.Лот = ЗакупкиПринятыеОбязательства.Закупка
                ИЛИ ВременнаяТаблица.Закупка = ЗакупкиПринятыеОбязательства.Закупка
                ИЛИ ВременнаяТаблица.РеестрКонтрактов = ЗакупкиПринятыеОбязательства.Закупка
                ИЛИ ВременнаяТаблица.Контракт = ЗакупкиПринятыеОбязательства.Закупка
2. FatPanzer 11.11.20 18:29 Сейчас в теме
1. В первом случае ужас, конечно. Сравнивать между собой значения еще не связанных таблиц и тут же пытаться установить связь - такого я еще не видел ни разу в своей жизни...
2. Почему вы решили, что несколько записей - это неправильно?
3. Если записи в результате идентичны, то что мешает их просто сгруппировать?
5. tetraren 35 11.11.20 18:54 Сейчас в теме
Подумайте над тем, чтобы заранее свести поле временной таблицы к одному значению. Как - смотрите по логике решения. Обычно это возможно, заранее понять, что это за сущность: лот, контракт или что-то еще.

Должно быть что-то вроде
ВЫБРАТЬ ISNULL(ISNULL(ISNULL(Данные.Лот, Данные.Закупка), Данные.РеестрКонтрактов), Данные.Контракт) КАК Закупка
ПОМЕСТИТЬ ВременнаяТаблица
ИЗ Данные
ИНДЕКСИРОВАТЬ ПО Закупка;

ВЫБРАТЬ *
ИЗ Регистр
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВременнаяТаблица
ПО ВременнаяТаблица.Закупка = Регистр.Закупка
Показать
6. starjevschik 11.11.20 22:54 Сейчас в теме
Это только учебой решается... хорошая книжка по языку SQL и вуаля.
7. Sherdrada 12.11.20 17:26 Сейчас в теме
(6) можете рекомендовать какую-то конкретную книжку?
8. starjevschik 12.11.20 20:58 Сейчас в теме
(7) я б забил в поиск sql language tutorial и дальше по ссылкам
я сам когда-то на курсы ходил, дело хорошее, но не бесплатное и для 1с чрезмерное, наверное.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот