|
Соединение таблиц в запросе по условию | ☑ | ||
---|---|---|---|---|
0
Shmidt
21.05.15
✎
16:53
|
Доброго времени суток. Такой вопрос:
Пишу запрос, соединяю 2 таблицы: ТЧДокумента и РС. Есть 3 условия связи По дате, по смене и по номенклатуре. Дата и Смена присутсвуют в обеих таблицах всегда, а вот Номенклатура в ТЧ есть всегда, а в РС может и не быть. Цель такая: выбираем все записи из ТЧДокумента и ищем В РС записи удовлетворяющие По дате и Смене. Если у записи в РС Номенклатура не заполнена, тогда запись действительна для всей номенклатуры ТЧДокумента, иначе только для конкретной номенклатуры. Как реализовать, чтобы Связь №3 работала только при условии, что В РС Номенклатура <> NULL? |
|||
1
ДенисЧ
21.05.15
✎
16:55
|
И ВЫБОР КОГДА РС.Номенклатура ЕСТЬ NULL ТОГДА ИСтина ИНАЧЕ Рс.Номенклатура = ТЧ.Номенклатура КОНЕЦ
|
|||
2
DirecTwiX
21.05.15
✎
16:59
|
Выбор будет медленнее или быстрее?
И (РС.Номенклатура ЕСТЬ NULL ИЛИ Рс.Номенклатура = ТЧ.Номенклатура) |
|||
3
Shmidt
21.05.15
✎
16:59
|
(1) Я так пробовал, не взлетело. Рс.Номенклатура = ТЧ.Номенклатура выполняется, а РС.Номенклатура ЕСТЬ NULL ТОГДА ИСтина нет. Может там не NULL значение...
|
|||
4
Shmidt
21.05.15
✎
17:06
|
Тоесть не подставляется значение из записи РС с пустой Номенклатурой, хотя Дата и Смена совпадают (((
|
|||
5
Shmidt
21.05.15
✎
17:06
|
Уже по-всякому вертел ((
|
|||
6
Бубка Гоп
21.05.15
✎
17:07
|
(5) покажи текст запроса, где соединяешь
|
|||
7
Shmidt
21.05.15
✎
17:07
|
(6) ВЫБРАТЬ
ОтчетМастераСменыВыпуск.Ссылка.Смена, ОтчетМастераСменыВыпуск.Номенклатура, ОтчетМастераСменыВыпуск.Количество, АНМ_ПланПроизводительностиЛинии.КоличествоПродукции, АНМ_ПланПроизводительностиЛинии.Номенклатура КАК Номенклатура1 ИЗ Документ.ОтчетМастераСмены.Выпуск КАК ОтчетМастераСменыВыпуск ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АНМ_ПланПроизводительностиЛинии КАК АНМ_ПланПроизводительностиЛинии ПО (НАЧАЛОПЕРИОДА(ОтчетМастераСменыВыпуск.Ссылка.Дата, МЕСЯЦ) = НАЧАЛОПЕРИОДА(АНМ_ПланПроизводительностиЛинии.Период, МЕСЯЦ)) И ОтчетМастераСменыВыпуск.Ссылка.Смена = АНМ_ПланПроизводительностиЛинии.Смена И ОтчетМастераСменыВыпуск.Номенклатура = АНМ_ПланПроизводительностиЛинии.Номенклатура |
|||
8
Shmidt
21.05.15
✎
17:09
|
Вот это злополучная связь:
И ОтчетМастераСменыВыпуск.Номенклатура = АНМ_ПланПроизводительностиЛинии.Номенклатура |
|||
9
leonidkorolev
21.05.15
✎
17:22
|
Мне кажется, что в момент когда идёт вычисление условий нулов ещё нет, там же просто перебор всех комбинаций и проверка условий. А в комбинациях не может же быть нулов.
Предлагаю сделать два левых соединения. С двумя и с тремя условиями. Потом в выводимых полях уже проверять на нул вариант с тремя условиями и выводить с результа соединения с двумя условиями. |
|||
10
leonidkorolev
21.05.15
✎
17:26
|
ну вот что-то типа этого
(писал в блокноте могут быть ошибки) ВЫБРАТЬ ОтчетМастераСменыВыпуск.Ссылка.Смена, ОтчетМастераСменыВыпуск.Номенклатура, ОтчетМастераСменыВыпуск.Количество, isnull(АНМ_ПланПроизводительностиЛинии3условия.КоличествоПродукции,АНМ_ПланПроизводительностиЛинии3условия.КоличествоПродукции2условия) ИЗ Документ.ОтчетМастераСмены.Выпуск КАК ОтчетМастераСменыВыпуск ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АНМ_ПланПроизводительностиЛинии КАК АНМ_ПланПроизводительностиЛинии2условия ПО (НАЧАЛОПЕРИОДА(ОтчетМастераСменыВыпуск.Ссылка.Дата, МЕСЯЦ) = НАЧАЛОПЕРИОДА(АНМ_ПланПроизводительностиЛинии2условия.Период, МЕСЯЦ)) И ОтчетМастераСменыВыпуск.Ссылка.Смена = АНМ_ПланПроизводительностиЛинии2условия.Смена ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АНМ_ПланПроизводительностиЛинии КАК АНМ_ПланПроизводительностиЛинии3условия ПО (НАЧАЛОПЕРИОДА(ОтчетМастераСменыВыпуск.Ссылка.Дата, МЕСЯЦ) = НАЧАЛОПЕРИОДА(АНМ_ПланПроизводительностиЛинии3условия.Период, МЕСЯЦ)) И ОтчетМастераСменыВыпуск.Ссылка.Смена = АНМ_ПланПроизводительностиЛинии3условия.Смена И ОтчетМастераСменыВыпуск.Номенклатура = АНМ_ПланПроизводительностиЛинии3условия.Номенклатура |
|||
11
D_E_S_131
21.05.15
✎
17:29
|
Предлагаю сделать 2 подзапроса. В 1-м сделать условие на равенство по Номенклатуре, а во 2-м без этого условия. так же добавить поле "Приоритет". Для 1-го подзапроса установить Приоритет = 1, а для 2-го "2".
|
|||
12
ssh2006
21.05.15
✎
17:53
|
(0) можно выбрать две таблицы РС и двалевых соед с ТЧ. Первую соединять по условию дата смена пустая номенклатура, вторую - дата смена номенклатура
и дальше выбор/когда/тогда |
|||
13
Бубка Гоп
21.05.15
✎
17:56
|
(7) имхо, провреку по номенклатуре надо бы попробовать вынести из соединения в условие
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |