![]() |
|
Полное соединение в запросе | ☑ | ||
---|---|---|---|---|
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 временные таблицы, а потом уже связывать с номенклатурой.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |