|   |   | 
| 
 | Полное соединение в запросе | ☑ | ||
|---|---|---|---|---|
| 0
    
        Tzeentch 02.06.17✎ 12:27 | 
        Всем привет! Написал вот такой запрос:
 "ВЫБРАТЬ | ТаблицаБП.КодТовара, | ТаблицаБП.КоличествоБП, | ТаблицаБП.СебестоимостьБП |ПОМЕСТИТЬ ДанныеБПВременная |ИЗ | &ТаблицаБП КАК ТаблицаБП |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДанныеБПВременная.КодТовара, | СУММА(ДанныеБПВременная.КоличествоБП) КАК КоличествоБП, | СУММА(ДанныеБПВременная.СебестоимостьБП) КАК СебестоимостьБП |ПОМЕСТИТЬ ДанныеБП |ИЗ | ДанныеБПВременная КАК ДанныеБПВременная | |СГРУППИРОВАТЬ ПО | ДанныеБПВременная.КодТовара |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ХозрасчетныйОстатки.Субконто1 КАК Ссылка, | СУММА(ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0)) КАК КоличествоКА, | ХозрасчетныйОстатки.Субконто1.Артикул КАК КодТовара, | СУММА(ВЫБОР | КОГДА ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) > 0 | ТОГДА ВЫРАЗИТЬ(ХозрасчетныйОстатки.СуммаОстаток / ХозрасчетныйОстатки.КоличествоОстаток КАК ЧИСЛО(10, 2)) | ИНАЧЕ ХозрасчетныйОстатки.СуммаОстаток / 1 | КОНЕЦ) КАК СебестоимостьКА, | СУММА(ЕСТЬNULL(ДанныеБП.КоличествоБП, 0)) КАК КоличествоБП, | СУММА(ЕСТЬNULL(ДанныеБП.СебестоимостьБП, 0)) КАК СебестоимостьБП, | СУММА(ВЫБОР | КОГДА ЕСТЬNULL(ДанныеБП.КоличествоБП, 0) > 0 | ТОГДА ВЫРАЗИТЬ(ХозрасчетныйОстатки.КоличествоОстаток / ДанныеБП.КоличествоБП КАК ЧИСЛО(10, 2)) | ИНАЧЕ 0 | КОНЕЦ) КАК ОтклонениеПоКоличеству, | СУММА(ВЫБОР | КОГДА ЕСТЬNULL(ДанныеБП.СебестоимостьБП, 0) > 0 | ТОГДА ВЫБОР | КОГДА ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) > 0 | ТОГДА ВЫРАЗИТЬ(ХозрасчетныйОстатки.СуммаОстаток / ХозрасчетныйОстатки.КоличествоОстаток / ДанныеБП.СебестоимостьБП КАК ЧИСЛО(10, 2)) | ИНАЧЕ ВЫРАЗИТЬ(ХозрасчетныйОстатки.СуммаОстаток / 1 / ДанныеБП.СебестоимостьБП КАК ЧИСЛО(10, 2)) | КОНЕЦ | ИНАЧЕ 0 | КОНЕЦ) КАК ОтклонениеПоСебестоимости |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОтчета, , , Организация = &Организация) КАК ХозрасчетныйОстатки | ПОЛНОЕ СОЕДИНЕНИЕ ДанныеБП КАК ДанныеБП | ПО ХозрасчетныйОстатки.Субконто1.Артикул = ДанныеБП.КодТовара |ГДЕ | (ХозрасчетныйОстатки.Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ТоварыНаСкладах) | ИЛИ ХозрасчетныйОстатки.Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Материалы) | И ХозрасчетныйОстатки.Субконто1 ССЫЛКА Справочник.Номенклатура) | |СГРУППИРОВАТЬ ПО | ХозрасчетныйОстатки.Субконто1, | ХозрасчетныйОстатки.Субконто1.Артикул" В итоге он должен выдать мне все записи, совпавшие по полю КодТовара, а также все записи из обеих таблиц, для которых поля не совпали. Но выдает только совпашие и записи из первой таблицы (РегистрБухгалтерии.Хозрасчетный.Остатки). Что я делаю не так? Как мне получить все записи, совпавшие по полю КодТовара, а также все записи из обеих таблиц, для которых поля не совпали? | |||
| 1
    
        dezss 02.06.17✎ 12:29 | 
        Вынеси в отдельную временную таблицу
 РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОтчета, , , Организация = &Организация) КАК ХозрасчетныйОстатки и туда же вынеси условия ГДЕ | |||
| 2
    
        dezss 02.06.17✎ 12:30 | 
        из-за условий в ГДЕ твое полное стало левым     | |||
| 3
    
        Tzeentch 02.06.17✎ 13:57 | 
        (2) Спасибо, работает! 
 А почему так? Почему, если делать условие ГДЕ, полное соединение становится левым? | |||
| 4
    
        Михаил Козлов 02.06.17✎ 14:04 | 
        Это ГДЕ отсекает все записи из ДанныеБП.     | |||
| 5
    
        catena 02.06.17✎ 14:07 | 
        (3)Записи, где твои значения NULL твоему условию ГДЕ не соответствуют.     | |||
| 6
    
        dezss 02.06.17✎ 14:31 | 
        (3) а если бы ты накладывал условия и на ДанныеБП, то вообще было бы внутрннее соединение.     | |||
| 7
    
        dezss 02.06.17✎ 14:35 | 
        (3) можно было бы, конечно, написать так
 Выбор Когда ХозрасчетныйОстатки.Счет есть null Тогда Истина Иначе ХозрасчетныйОстатки.Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ТоварыНаСкладах) Конец Но лучше так не делать, потому что тогда не будут использоваться индексы (если они есть). Да и для наглядности так сложнее. | |||
| 8
    
        Tzeentch 02.06.17✎ 14:37 | 
        (4) (5) (6) Спасибо! Написал вот так:
 "ВЫБРАТЬ | ТаблицаБП.КодТовара, | ТаблицаБП.КоличествоБП, | ТаблицаБП.СебестоимостьБП, | ТаблицаБП.СебестоимостьБПОбщая |ПОМЕСТИТЬ ДанныеБПВременная |ИЗ | &ТаблицаБП КАК ТаблицаБП |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДанныеБПВременная.КодТовара, | СУММА(ДанныеБПВременная.КоличествоБП) КАК КоличествоБП, | СУММА(ДанныеБПВременная.СебестоимостьБП) КАК СебестоимостьБП, | СУММА(ДанныеБПВременная.СебестоимостьБПОбщая) КАК СебестоимостьБПОбщая |ПОМЕСТИТЬ ДанныеБП |ИЗ | ДанныеБПВременная КАК ДанныеБПВременная | |СГРУППИРОВАТЬ ПО | ДанныеБПВременная.КодТовара |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК КоличествоКА, | ХозрасчетныйОстатки.Субконто1.Артикул КАК КодТовара, | СУММА(ВЫБОР | КОГДА ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) > 0 | ТОГДА ВЫРАЗИТЬ(ХозрасчетныйОстатки.СуммаОстаток / ХозрасчетныйОстатки.КоличествоОстаток КАК ЧИСЛО(10, 2)) | ИНАЧЕ ХозрасчетныйОстатки.СуммаОстаток / 1 | КОНЕЦ) КАК СебестоимостьКА, | СУММА(ХозрасчетныйОстатки.СуммаОстаток) КАК СебестомисотьКАОбщая |ПОМЕСТИТЬ ДанныеКА |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОтчета, , , Организация = &Организация) КАК ХозрасчетныйОстатки |ГДЕ | (ХозрасчетныйОстатки.Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ТоварыНаСкладах) | ИЛИ ХозрасчетныйОстатки.Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Материалы) | И ХозрасчетныйОстатки.Субконто1 ССЫЛКА Справочник.Номенклатура) | |СГРУППИРОВАТЬ ПО | ХозрасчетныйОстатки.Субконто1.Артикул |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДанныеКА.КодТовара КАК КодТовараКА, | СУММА(ЕСТЬNULL(ДанныеКА.КоличествоКА, 0)) КАК КоличествоКА, | СУММА(ЕСТЬNULL(ДанныеКА.СебестоимостьКА, 0)) КАК СебестоимостьКА, | СУММА(ЕСТЬNULL(ДанныеКА.СебестомисотьКАОбщая, 0)) КАК СебестоимостьКАОБщая, | СУММА(ЕСТЬNULL(ДанныеБП.КоличествоБП, 0)) КАК КоличествоБП, | СУММА(ЕСТЬNULL(ДанныеБП.СебестоимостьБП, 0)) КАК СебестоимостьБП, | СУММА(ЕСТЬNULL(ДанныеБП.СебестоимостьБПОбщая, 0)) КАК СебестоимостьБПОбщая, | СУММА(ВЫБОР | КОГДА ЕСТЬNULL(ДанныеКА.КоличествоКА, 0) <> 0 | И ЕСТЬNULL(ДанныеБП.КоличествоБП, 0) <> 0 | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ДанныеКА.КоличествоКА, 0) / ЕСТЬNULL(ДанныеБП.КоличествоБП, 0) КАК ЧИСЛО(10, 2)) | ИНАЧЕ 0 | КОНЕЦ) КАК ОтклонениеПоКоличеству, | СУММА(ВЫБОР | КОГДА ЕСТЬNULL(ЕСТЬNULL(ДанныеКА.СебестоимостьКА, 0), 0) <> 0 | И ЕСТЬNULL(ЕСТЬNULL(ДанныеБП.СебестоимостьБП, 0), 0) <> 0 | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ДанныеКА.СебестоимостьКА, 0), 0) / ЕСТЬNULL(ЕСТЬNULL(ДанныеБП.СебестоимостьБП, 0), 0) КАК ЧИСЛО(10, 2)) | ИНАЧЕ 0 | КОНЕЦ) КАК ОтклонениеПоСебестоимости, | СУММА(ВЫБОР | КОГДА ЕСТЬNULL(ЕСТЬNULL(ДанныеКА.СебестомисотьКАОбщая, 0), 0) <> 0 | И ЕСТЬNULL(ЕСТЬNULL(ДанныеБП.СебестоимостьБПОбщая, 0), 0) <> 0 | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ДанныеКА.СебестомисотьКАОбщая, 0), 0) / ЕСТЬNULL(ЕСТЬNULL(ДанныеБП.СебестоимостьБПОбщая, 0), 0) КАК ЧИСЛО(10, 2)) | ИНАЧЕ 0 | КОНЕЦ) КАК ОтклонениеПоОбщейСебестоимости, | ДанныеБП.КодТовара КАК КодТовараБП |ИЗ | ДанныеКА КАК ДанныеКА | ПОЛНОЕ СОЕДИНЕНИЕ ДанныеБП КАК ДанныеБП | ПО ДанныеКА.КодТовара = ДанныеБП.КодТовара | |СГРУППИРОВАТЬ ПО | ДанныеКА.КодТовара, | ДанныеБП.КодТовара" Показывает то, что нужно. Теперь задача ко всему этому вывести колонку со ссылкой на номенклатуру, у которой Артикул = КодТовара. Нужно вывести номенклатуру для кодов товара из обоих таблиц.(в базе, где делаю запрос эта вся эта номенклатура есть). Делаю связи справочника Номенклатура с каждой таблицей, пишет - Противоречивая связь. Как правильно сделать? | |||
| 9
    
        dezss 02.06.17✎ 14:40 | 
        (8)во временных присоединяй сразу номенклатуру.     | |||
| 10
    
        dezss 02.06.17✎ 14:42 | 
        (9) + если не хочешь получать 2 столбика со ссылками на номенклатуру (поКА и поБП), то тебе надо объединять эти 2 временные таблицы, а потом уже связывать с номенклатурой.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |