Соединение в запросе двух таблиц

1. Дон Кихот 16.12.20 13:04 Сейчас в теме
Соединяю в запросе две таблицы, упростил их в скрине. Подскажите пожалуйста способ соединения для получения нужной таблицы
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. homer_ 79 16.12.20 13:09 Сейчас в теме
Объединить 3 таб: 1 таб, 2 таб (отбор 1), 2 таб (отбор 2)
3. M_A_D 196 16.12.20 13:11 Сейчас в теме
(2)можно только 2 и оставить, и обойтись не отборами а конструкцией "Выбор когда статус = "" тогда..."
В данном случае можно сделать через присоединение второй таблицы к первой через левое соединение.
4. alekseineputin 26 16.12.20 13:16 Сейчас в теме
ВЫБРАТЬ
	"123" КАК Код,
	5 КАК Количество
ПОМЕСТИТЬ ВТ_Таблица1
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	"123" КАК Код,
	"В дороге" КАК Статус,
	2 КАК Количество
ПОМЕСТИТЬ ВТ_Таблица2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"123",
	"На складе",
	3
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Таблица1.Код КАК Код,
	МАКСИМУМ(ВТ_Таблица1.Количество) КАК Количество,
	СУММА(ВЫБОР
			КОГДА ВТ_Таблица2.Статус = "В дороге"
				ТОГДА ВТ_Таблица2.Количество
			ИНАЧЕ 0
		КОНЕЦ) КАК КоличествоВДороге,
	СУММА(ВЫБОР
			КОГДА ВТ_Таблица2.Статус = "На складе"
				ТОГДА ВТ_Таблица2.Количество
			ИНАЧЕ 0
		КОНЕЦ) КАК КоличествоНаСкладе
ИЗ
	ВТ_Таблица1 КАК ВТ_Таблица1
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Таблица2 КАК ВТ_Таблица2
		ПО (ВТ_Таблица1.Код = ВТ_Таблица2.Код)

СГРУППИРОВАТЬ ПО
	ВТ_Таблица1.Код
Показать
5. SlavaKron 16.12.20 13:26 Сейчас в теме
ВЫБРАТЬ
	"123" КАК Код,
	5 КАК Количество
ПОМЕСТИТЬ Т1
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	"123" КАК Код,
	"В дороге" КАК Статус,
	2 КАК Количество
ПОМЕСТИТЬ Т2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"123",
	"На складе",
	3
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Т1.Код КАК Код,
	Т1.Количество КАК Количество,
	ВДороге.Количество КАК КоличествоВДороге,
	НаСкладе.Количество КАК КоличествоНаСкладе
ИЗ
	Т1 КАК Т1
		ЛЕВОЕ СОЕДИНЕНИЕ Т2 КАК ВДороге
		ПО (Т1.Код = ВДороге.Код
				И ВДороге.Статус = "В дороге")
		ЛЕВОЕ СОЕДИНЕНИЕ Т2 КАК НаСкладе
		ПО (Т1.Код = НаСкладе.Код
				И НаСкладе.Статус = "На складе")
Показать
Cyrus842; +1 Ответить
6. Дон Кихот 16.12.20 13:34 Сейчас в теме
(5) Таблицу упростил, и строк с разными кодами может быть много.
7. SlavaKron 16.12.20 13:36 Сейчас в теме
(6) Это ничего не меняет.
8. Дон Кихот 16.12.20 13:39 Сейчас в теме
(5)
"В дороге" КАК Статус,

Правильно понимаю что это заменится Выбор Когда
10. SlavaKron 16.12.20 13:41 Сейчас в теме
(8) Нет, это первичные данные 2-й таблицы.
12. Дон Кихот 16.12.20 15:59 Сейчас в теме
(5)Сделал так, работает, напишите пожалуйста ваше мнение.
Выбрать
Код,
Количество
Поместить Т1
Из Таблица1
;
Выбрать
Код,
Количество Как КоличествоВДороге
Поместить ПоСтатусуВДороге
Из Таблица 2
Где Статус = Значение(Перечисление.Статусы.ВДороге)
;
Выбрать
Код,
Количество Как КоличествоНаСкладе
Поместить ПоСтатусуНаСкладе
Из Таблица 2
Где Статус = Значение(Перечисление.Статусы.НаСкладе)
;
Выбрать
Код,
Количество,
КоличествоВДороге,
КоличествоНаСкладе
Из Т1
Левое Соединение ПоСтатусуВДороге
По Т1.Код = Т2.Код
Левое Соединение ПоСтатусуНаСкладе
По Т1.Код = Т2.Код
Показать
13. homer_ 79 16.12.20 16:10 Сейчас в теме
(12) Я написал выше что через объединение будет правильнее. "Ошибка" будет если одинаковых кодов несколько в одной из таблиц
14. SlavaKron 16.12.20 16:12 Сейчас в теме
(12) Обратите внимание на другие ответы. Вариант с соединением будет работать только в том случае, если таблицы ПоСтатусуВДороге и ПоСтатусуНаСкладе уже сгруппированы и на каждую строку из Таблица1 приходится не более 1 строки из этих таблиц, иначе произойдет перемножение количества строк в результирующем запросе. В таком случае лучше воспользоваться вариантами из (2) или (9), на мой взгляд.
9. antz 16.12.20 13:40 Сейчас в теме
ВЫБРАТЬ
	"123" КАК Код,
	5 КАК Количество
ПОМЕСТИТЬ Т1
;

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
	"123" КАК Код,
	"В дороге" КАК Статус,
	2 КАК Количество
ПОМЕСТИТЬ Т2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"123",
	"На складе",
	3
;

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
	Т1.Код КАК Код,
	СУММА(ВЫБОР КОГДА  Т2.Статус = "В дороге" Тогда Т1.Количество Иначе 0 Конец) КАК КоличествоВДороге,
	СУММА(ВЫБОР КОГДА  Т2.Статус = "На складе" Тогда Т1.Количество Иначе 0 Конец) КАК КоличествоНаСкладе
ИЗ
	Т1 КАК Т1
		ЛЕВОЕ СОЕДИНЕНИЕ Т2 КАК Т2
		ПО (Т1.Код = Т2.Код)
СГРУППИРОВАТЬ ПО
	Т1.Код
Показать
11. homer_ 79 16.12.20 14:40 Сейчас в теме
задача не сделать меньше строк в запросе а сделать правильнее!!!
объединение работает быстрее и понятнее.
З.Ы. мой вариант был для конкретного примера, возможно соединение подойдет если данные будут другие))
Оставьте свое сообщение

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