|
|
Соединить две таблицы с желательным условием |
☑ |
|
0
leshiy_SV
04.12.19
✎
17:07
|
Добрый день.
Подскажите, как соединить две таблицы по условию, чтоб из второй таблицы взять желательно только то, что будет равно "Красный". Если такого нет, то взять любой.
|ТАБ1 |
----------
|роза |
|ромашка |
|Тюльпан |
|ТАБ2 |
----------
|роза |Красный|
|роза |Желтый |
|ромашка |Белый |
|Тюльпан |Красный|
|Тюльпан |Желтый |
|Тюльпан |Синий |
Чтобы в итоге получилось
|роза |Красный|
|ромашка |Белый |
|Тюльпан |Красный|
|
|
|
1
sevod
04.12.19
✎
17:15
|
Делаем временную таблицу из ТАБ2 (ВТ), с отбором по красному.
Дальше к ТАБ1 левое соединение ВТ и ТАБ2. isnull(ВТ, Таб2)
|
|
|
2
Ёпрст
гуру
04.12.19
✎
17:16
|
2 запроса в юнион, в первом, соединение по ромашке и цвету, во втором только по ромашке, дальше группируешь и все, можешь еще приоритеты задать в запросах
|
|
|
3
leshiy_SV
05.12.19
✎
12:34
|
ВЫБРАТЬ
Цветы.Наименование КАК Наименование,
ЦветыРазноцветные.Цвет КАК Цвет
ПОМЕСТИТЬ ВТ_Цветы_Красные
ИЗ
Цветы КАК Цветы
ЛЕВОЕ СОЕДИНЕНИЕ ЦветыРазноцветные КАК ЦветыРазноцветные
ПО Цветы.Наименование = ЦветыРазноцветные.Наименование
И (ЦветыРазноцветные.Цвет = ЗНАЧЕНИЕ(Справочник.Цвет.Красный))
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Цветы_Красные.Наименование КАК Наименование,
ВЫБОР
КОГДА ВТ_Цветы_Красные.Цвет ЕСТЬ NULL
ТОГДА ЦветыРазноцветные.Цвет
ИНАЧЕ ВТ_Цветы.ФормаОбучения
КОНЕЦ КАК ВТ_Цветы_Красные.Цвет
ИЗ
ВТ_Цветы_Красные КАК ВТ_Цветы_Красные
ЛЕВОЕ СОЕДИНЕНИЕ ЦветыРазноцветные КАК ЦветыРазноцветные
ПО ВТ_Цветы_Красные.Наименование = ЦветыРазноцветные.Наименование
И (ЦветыРазноцветные.Цвет <> ЗНАЧЕНИЕ(Справочник.Цвет.Красный))
УПОРЯДОЧИТЬ ПО
Наименование
АВТОУПОРЯДОЧИВАНИЕ
|
|
|
4
sevod
05.12.19
✎
13:57
|
Вот это
ВЫБОР
КОГДА ВТ_Цветы_Красные.Цвет ЕСТЬ NULL
ТОГДА ЦветыРазноцветные.Цвет
ИНАЧЕ ВТ_Цветы.ФормаОбучения
КОНЕЦ КАК ВТ_Цветы_Красные.Цвет
пишется одной строкой
ЕСТЬNULL(ЦветыРазноцветные.Цвет, ВТ_Цветы.ФормаОбучения)
что бы быстрее писать, не переключая раскладку, пишут ISNULL.
Если не понял, загугли ЕСТЬNULL() для 1С.
|
|
|
5
sevod
05.12.19
✎
14:12
|
"ЕСТЬNULL(ЦветыРазноцветные.Цвет, ВТ_Цветы.ФормаОбучения)" А может наоборот :)
"ЕСТЬNULL(ВТ_Цветы.ФормаОбучения, ЦветыРазноцветные.Цвет)" Но думаю поймешь.
" ВТ_Цветы.ФормаОбучения" это откуда?
У тебя этот запрос вообще работает? У тебя соединение во втором запросе правильное? Я без конструктора плохо читаю запросы.
|
|
|
6
leshiy_SV
05.12.19
✎
14:56
|
" ВТ_Цветы.ФормаОбучения" это откуда?
Это хвост из 1С: Университет. :)
Просто взял такой простой пример (цвета, цветочки), чтоб легче объяснить, что мне нужно. На самом деле там - студенты, статусы и прочие поля.
Запрос в реальности работает.
Сначала в таблицу с определенными студентами добавляю данные, которые есть у очников, а вторым присоединением через ISNULL() добавляю данные, которые есть у заочников. Суть запроса если студент учится и на очном и на заочном, то в приоритете в итоговую таблицу попадали данные по очной форме.
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший