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

1. user1589890 15.06.22 12:38 Сейчас в теме
Всем добрый день. Ребят уже изошелся на нет, никак не могу понять почему не формируется корректно таблица в запросе....

Вроде бы всё элементарно но такое чувство что что-то упустил.

Вот запрос
ВЫБРАТЬ
	ЗаявкиПоОтделам.НСБ КАК НСБ,
	ЗаявкиПоОтделам.Контрагент КАК Контрагент,
	ЗаявкиПоОтделам.СуммаЛимита КАК СуммаЛимита,
	ЗаявкиПоОтделам.СуммаФакт КАК СуммаФакт
ИЗ
	РегистрНакопления.ЗаявкиПоОтделам КАК ЗаявкиПоОтделам
ГДЕ
	ЗаявкиПоОтделам.ПериодЛимита = &ПериодЛимита
	И ЗаявкиПоОтделам.Участок = &Участок

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

ВЫБРАТЬ
	ЗаявкиПоОтделамФакт.НСБ,
	ЗаявкиПоОтделамФакт.Контрагент,
	ЗаявкиПоОтделамФакт.СуммаЛимита,
	ЗаявкиПоОтделамФакт.СуммаФакт
ИЗ
	РегистрНакопления.ЗаявкиПоОтделамФакт КАК ЗаявкиПоОтделамФакт
ГДЕ
	ЗаявкиПоОтделамФакт.ПериодЛимита = &ПериодЛимита
	И ЗаявкиПоОтделамФакт.Участок = &Участок
Показать


Результат формируется в 8 строк, но в каждом регистре 4 строки и мне нужно что бы он и объединил в 4 строки....
Скажите мне "...." в чём я ошибся?

Результат прикрепил
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
27. nikolasx 60 15.06.22 20:46 Сейчас в теме
(25) Вася, Вася! Автор четко написал какой результат ему нужен
Результат формируется в 8 строк, но в каждом регистре 4 строки и мне нужно что бы он и объединил в 4 строки....
Скажите мне "...." в чём я ошибся?
Таким образом, ему не нужно объединять, а нужно соединять по двум измерениям. Более точный запрос написали ниже, добавлю ещё, не хватает условий для второго регистра, а то будет сверять со всеми данными и запрос будет работать дольше.
ВЫБРАТЬ    
    ЕстьNULL(ЗаявкиПоОтделам.НСБ, ЗаявкиПоОтделамФакт.НСБ) КАК НСБ,
    ЕстьNULL(ЗаявкиПоОтделам.Контрагент, ЗаявкиПоОтделамФакт.Контрагент) КАК Контрагент,
    ЕстьNULL(ЗаявкиПоОтделам.СуммаЛимита, ЗаявкиПоОтделамФакт.СуммаЛимита) КАК СуммаЛимита,
    ЕстьNULL(ЗаявкиПоОтделамФакт.СуммаФакт, 0) КАК СуммаФакт    
ИЗ
    ЗаявкиПоОтделам КАК ЗаявкиПоОтделам
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаявкиПоОтделамФакт КАК ЗаявкиПоОтделамФакт
        ПО (ЗаявкиПоОтделам.НСБ = ЗаявкиПоОтделамФакт.НСБ
            и ЗаявкиПоОтделам.Контрагент = ЗаявкиПоОтделамФакт.Контрагент)
ГДЕ
    ЗаявкиПоОтделамФакт.ПериодЛимита = &ПериодЛимита
    И ЗаявкиПоОтделамФакт.Участок = &Участок
    И ЗаявкиПоОтделам.ПериодЛимита = &ПериодЛимита
    И ЗаявкиПоОтделам.Участок = &Участок
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. spacecraft 15.06.22 12:53 Сейчас в теме
(1) поместить во временную таблицу и получать из нее с группировками
9. user1589890 15.06.22 13:01 Сейчас в теме
(7) Группировка не нужна, иначе он сгруппирует строки с одинаковыми значениями.
Смысл в том что в фактической таблице заполняется "СуммаФакт"
Вот мне и нужно что бы это значение подтянулось в общую строку
11. spacecraft 15.06.22 13:06 Сейчас в теме
(9)
ВЫБРАТЬ
ВТ1.НСБ КАК НСБ,
ВТ1.Контрагент КАК Контрагент,
Сумма(ВТ1.СуммаЛимита) КАК СуммаЛимита,
Сумма(ВТ1.СуммаФакт) КАК СуммаФакт
ИЗ
ВТ1 КАК ВТ1

СГРУППИРОВАТЬ ПО
ВТ1.НСБ,
ВТ1.Контрагент
Показать


В ВТ1 поместить целиком весть запрос из шапки.
14. spacecraft 15.06.22 13:12 Сейчас в теме
(1) кстати. в данном случае вообще объединять ничего не нужно. Все данные есть во второй таблице.
Просто использовать ее:
ВЫБРАТЬ
    ЗаявкиПоОтделамФакт.НСБ,
    ЗаявкиПоОтделамФакт.Контрагент,
    ЗаявкиПоОтделамФакт.СуммаЛимита,
    ЗаявкиПоОтделамФакт.СуммаФакт
ИЗ
    РегистрНакопления.ЗаявкиПоОтделамФакт КАК ЗаявкиПоОтделамФакт
ГДЕ
    ЗаявкиПоОтделамФакт.ПериодЛимита = &ПериодЛимита
    И ЗаявкиПоОтделамФакт.Участок = &Участок
Показать
user705522_constantin_h; +1 Ответить
2. user1589890 15.06.22 12:45 Сейчас в теме
Набор полей полей одинаковый!
3. KovaraKing 15.06.22 12:49 Сейчас в теме
Попробуйте ОБЪЕДИНИТЬ ВСЕ заменить на просто ОБЪЕДИНИТЬ
5. user1589890 15.06.22 12:52 Сейчас в теме
(3)Это не вариант, он сгруппирует тогда!
Прикрепленные файлы:
4. starjevschik 15.06.22 12:52 Сейчас в теме
ну может почитать, что такое объединить?
Поскольку задача неизвестна, решить ее можно разными путями с разным результатом, но с нужным количеством строк.
Например так
Выбрать НСБ, Контрагент, Сумма(СуммаЛимита), Сумма(СуммаФакт) из (ВЫБРАТЬ
    ЗаявкиПоОтделам.НСБ КАК НСБ,
    ЗаявкиПоОтделам.Контрагент КАК Контрагент,
    ЗаявкиПоОтделам.СуммаЛимита КАК СуммаЛимита,
    ЗаявкиПоОтделам.СуммаФакт КАК СуммаФакт
ИЗ
    РегистрНакопления.ЗаявкиПоОтделам КАК ЗаявкиПоОтделам
ГДЕ
    ЗаявкиПоОтделам.ПериодЛимита = &ПериодЛимита
    И ЗаявкиПоОтделам.Участок = &Участок

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

ВЫБРАТЬ
    ЗаявкиПоОтделамФакт.НСБ,
    ЗаявкиПоОтделамФакт.Контрагент,
    ЗаявкиПоОтделамФакт.СуммаЛимита,
    ЗаявкиПоОтделамФакт.СуммаФакт
ИЗ
    РегистрНакопления.ЗаявкиПоОтделамФакт КАК ЗаявкиПоОтделамФакт
ГДЕ
    ЗаявкиПоОтделамФакт.ПериодЛимита = &ПериодЛимита
    И ЗаявкиПоОтделамФакт.Участок = &Участок) ВсеДанные
Группировать по ВсеДанные.НСБ, ВсеДанные.Контрагент
Показать
6. melenaspb 208 15.06.22 12:53 Сейчас в теме
Поместите результат во временную таблицу, а потом сгруппируйте по Контрагент и НСБ
8. user1589890 15.06.22 12:59 Сейчас в теме
(6) Пробовал результат не тот...

ВЫБРАТЬ
ЗаявкиПоОтделам.НСБ КАК НСБ,
ЗаявкиПоОтделам.Контрагент КАК Контрагент,
ЗаявкиПоОтделам.СуммаЛимита КАК СуммаЛимита,
ЗаявкиПоОтделам.СуммаФакт КАК СуммаФакт
ПОМЕСТИТЬ ВТ1
ИЗ
РегистрНакопления.ЗаявкиПоОтделам КАК ЗаявкиПоОтделам
ГДЕ
ЗаявкиПоОтделам.ПериодЛимита = &ПериодЛимита
И ЗаявкиПоОтделам.Участок = &Участок
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
ЗаявкиПоОтделамФакт.НСБ КАК НСБ,
ЗаявкиПоОтделамФакт.Контрагент КАК Контрагент,
ЗаявкиПоОтделамФакт.СуммаЛимита КАК СуммаЛимита,
ЗаявкиПоОтделамФакт.СуммаФакт КАК СуммаФакт
ПОМЕСТИТЬ ВТ2
ИЗ
РегистрНакопления.ЗаявкиПоОтделамФакт КАК ЗаявкиПоОтделамФакт
ГДЕ
ЗаявкиПоОтделамФакт.ПериодЛимита = &ПериодЛимита
И ЗаявкиПоОтделамФакт.Участок = &Участок
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
ВТ1.НСБ КАК НСБ,
ВТ1.Контрагент КАК Контрагент,
ВТ1.СуммаЛимита КАК СуммаЛимита,
ВТ2.СуммаФакт КАК СуммаФакт
ИЗ
ВТ1 КАК ВТ1,
ВТ2 КАК ВТ2

СГРУППИРОВАТЬ ПО
ВТ1.НСБ,
ВТ1.Контрагент,
ВТ1.СуммаЛимита,
ВТ2.СуммаФакт
Прикрепленные файлы:
10. melenaspb 208 15.06.22 13:05 Сейчас в теме
(8) ваш первоначальный запрос во внешнюю таблицу


ВЫБРАТЬ
ЗаявкиПоОтделам.НСБ КАК НСБ,
ЗаявкиПоОтделам.Контрагент КАК Контрагент,
ЗаявкиПоОтделам.СуммаЛимита КАК СуммаЛимита,
ЗаявкиПоОтделам.СуммаФакт КАК СуммаФакт
Поместить ВТ
ИЗ
РегистрНакопления.ЗаявкиПоОтделам КАК ЗаявкиПоОтделам
ГДЕ
ЗаявкиПоОтделам.ПериодЛимита = &ПериодЛимита
И ЗаявкиПоОтделам.Участок = &Участок

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

ВЫБРАТЬ
ЗаявкиПоОтделамФакт.НСБ,
ЗаявкиПоОтделамФакт.Контрагент,
ЗаявкиПоОтделамФакт.СуммаЛимита,
ЗаявкиПоОтделамФакт.СуммаФакт
ИЗ
РегистрНакопления.ЗаявкиПоОтделамФакт КАК ЗаявкиПоОтделамФакт
ГДЕ
ЗаявкиПоОтделамФакт.ПериодЛимита = &ПериодЛимита
И ЗаявкиПоОтделамФакт.Участок = &Участок
;

ВЫБРАТЬ
ВТ.НСБ,
ВТ.Контрагент,
Сумма(ВТ.СуммаЛимита),
Сумма(ВТ.СуммаФакт)
ИЗ
ВТ КАК ВТ
СГРУППИРОВАТЬ ПО
ВТ.НСБ,
ВТ.Контрагент
15. user1589890 15.06.22 13:13 Сейчас в теме
(10)Всё было бы хорошо, но....
"НСБ" тогда он группируется в одно поле с одинаковым значением и получается 3 строки вместо 4
Прикрепленные файлы:
16. homer_ 79 15.06.22 13:22 Сейчас в теме
(15) я вот даже представить не могу, какая у вас стоит задача что бы вам надо было не группировать строки с учетом получаемых данных.
Может вам все таки озвучить ТЗ.
17. user1589890 15.06.22 13:41 Сейчас в теме
(16)Задача
Есть 2 регистра накоплений. У них одинаковые поля.
Разница в том что из первого регистра мне нужно взять например 3 поля(не важно какие) а поле "СуммаФакт" у него пустое
Во втором регистре все те же поля , но поле "СуммаФакт" заполнено.

В первом и втором регистре, записи идентичны, кроме как раз заполненного поля "СуммаФакт"

Вот мне и нужно объединить эти результаты в один, но без группировки!!!

То есть при формирования у меня не дублировались и был заполнен результат объединения по "СуммаФакт"


Так будет более понятно?
18. homer_ 79 15.06.22 13:53 Сейчас в теме
(17) в чем сакральный смысл не группировать строки по НСБ и Контрагенту. Вот этот момент объясните. Как понять что в таб1 4 строки и во 2 таб 4 строки, но в данных таблица встречаются идентичные строки. по какому признаку они сопоставляются если они идентичны)
22. nomad_irk 76 15.06.22 16:26 Сейчас в теме
(17) Вангую:

ВЫБРАТЬ
    ЗаявкиПоОтделам.НСБ КАК НСБ,
    ЗаявкиПоОтделам.Контрагент КАК Контрагент,
    ЗаявкиПоОтделам.СуммаЛимита КАК СуммаЛимита,
    ЗаявкиПоОтделам.СуммаФакт КАК СуммаФакт
Поместить ВТДанные
ИЗ
    РегистрНакопления.ЗаявкиПоОтделам КАК ЗаявкиПоОтделам
ГДЕ
    ЗаявкиПоОтделам.ПериодЛимита = &ПериодЛимита
    И ЗаявкиПоОтделам.Участок = &Участок

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

ВЫБРАТЬ
    ЗаявкиПоОтделамФакт.НСБ,
    ЗаявкиПоОтделамФакт.Контрагент,
    ЗаявкиПоОтделамФакт.СуммаЛимита,
    ЗаявкиПоОтделамФакт.СуммаФакт
ИЗ
    РегистрНакопления.ЗаявкиПоОтделамФакт КАК ЗаявкиПоОтделамФакт
ГДЕ
    ЗаявкиПоОтделамФакт.ПериодЛимита = &ПериодЛимита
    И ЗаявкиПоОтделамФакт.Участок = &Участок
;
ВЫБРАТЬ
    НСБ,
    Контрагент,
    СуммаЛимита
    Сумма(СуммаФакт) КАК СуммаФакт
ИЗ
    ВТДанные
СГРУППИРОВАТЬ ПО
    НСБ,
    Контрагент,
    СуммаЛимита
Показать


Или вообще вот так:

ВЫБРАТЬ
    ЗаявкиПоОтделамФакт.НСБ,
    ЗаявкиПоОтделамФакт.Контрагент,
    ЗаявкиПоОтделамФакт.СуммаЛимита,
    ЗаявкиПоОтделамФакт.СуммаФакт
ИЗ
    РегистрНакопления.ЗаявкиПоОтделамФакт КАК ЗаявкиПоОтделамФакт
ГДЕ
    ЗаявкиПоОтделамФакт.ПериодЛимита = &ПериодЛимита
    И ЗаявкиПоОтделамФакт.Участок = &Участок
СГРУППИРОВАТЬ ПО
    ЗаявкиПоОтделамФакт.НСБ,
    ЗаявкиПоОтделамФакт.Контрагент,
    ЗаявкиПоОтделамФакт.СуммаЛимита
Показать
12. starjevschik 15.06.22 13:07 Сейчас в теме
Надо просто сначала сформулировать задачу. Внятно, понятно, доступно.
А потом уже решать ее.
Хотя если зарплата не зависит от результата, а зависит от времени, то более логичным будет решать задачу, не поставив ее. Это можно делать до пенсии.
akR00b; homer_; +2 Ответить
13. user1589890 15.06.22 13:09 Сейчас в теме
(12)
зависит от

Причем тут зарплата? Я обратился за помощью что бы понять в чем причина, а не кричу здесь что мне нужна зарплата!
20. akR00b 24 15.06.22 15:59 Сейчас в теме
(13) Так чем Вам помочь? Вы пытаетесь ОБЪЕДИНИТЬ поля при этом подразумевая группировку, это разные вещи, не получится ОБЪЕДИНИТЬ различные по значению поля.
19. nikolasx 60 15.06.22 15:54 Сейчас в теме
Почему не сделать вот так? Соответственно лишние колонки суммы убрать.
ВЫБРАТЬ	
    ЗаявкиПоОтделам.НСБ КАК НСБ,
    ЗаявкиПоОтделам.Контрагент КАК Контрагент,
    ЗаявкиПоОтделам.СуммаЛимита КАК СуммаЛимита,
    ЗаявкиПоОтделам.СуммаФакт КАК СуммаФакт,	
    ЗаявкиПоОтделамФакт.ФактСуммаЛимита КАК ФактСуммаЛимита,
    ЗаявкиПоОтделамФакт.ФактСуммаФакт КАК ФактСуммаФакт

ИЗ
	ЗаявкиПоОтделам КАК ЗаявкиПоОтделам
		ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаявкиПоОтделамФакт КАК ЗаявкиПоОтделамФакт
		ПО (ЗаявкиПоОтделам.НСБ = ЗаявкиПоОтделамФакт.НСБ
			и ЗаявкиПоОтделам.Контрагент = ЗаявкиПоОтделамФакт.Контрагент)
Показать
23. nikolasx 60 15.06.22 16:49 Сейчас в теме
(19) Не понял, кто минусов наставил? Может и опишите что не так? Насколько я понял, автору нужно объединить два регистра по измерениям НСБ и Контрагент, а сумму, какую то взять с одного регистра, другую сумму с другого. Конечно только добавить условия еще в такой запрос нужно.
25. homer_ 79 15.06.22 16:59 Сейчас в теме
(23) Данный посмотри для начало у автора какие и подумай. что выдаст твой гениальный запрос.
26. user705522_constantin_h 37 15.06.22 17:29 Сейчас в теме
(25)По-моему, все правильно. Я тоже не понял: зачем объединение, а не соединение.
ВЫБРАТЬ    
    ЕстьNULL(ЗаявкиПоОтделам.НСБ, ЗаявкиПоОтделамФакт.НСБ) КАК НСБ,
    ЕстьNULL(ЗаявкиПоОтделам.Контрагент, ЗаявкиПоОтделамФакт.Контрагент) КАК Контрагент,
    ЕстьNULL(ЗаявкиПоОтделам.СуммаЛимита, ЗаявкиПоОтделамФакт.СуммаЛимита) КАК СуммаЛимита,
    ЕстьNULL(ЗаявкиПоОтделамФакт.СуммаФакт, 0) КАК СуммаФакт    
ИЗ
    ЗаявкиПоОтделам КАК ЗаявкиПоОтделам
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаявкиПоОтделамФакт КАК ЗаявкиПоОтделамФакт
        ПО (ЗаявкиПоОтделам.НСБ = ЗаявкиПоОтделамФакт.НСБ
            и ЗаявкиПоОтделам.Контрагент = ЗаявкиПоОтделамФакт.Контрагент)
ГДЕ
    ЗаявкиПоОтделамФакт.ПериодЛимита = &ПериодЛимита
    И ЗаявкиПоОтделамФакт.Участок = &Участок
Показать
27. nikolasx 60 15.06.22 20:46 Сейчас в теме
(25) Вася, Вася! Автор четко написал какой результат ему нужен
Результат формируется в 8 строк, но в каждом регистре 4 строки и мне нужно что бы он и объединил в 4 строки....
Скажите мне "...." в чём я ошибся?
Таким образом, ему не нужно объединять, а нужно соединять по двум измерениям. Более точный запрос написали ниже, добавлю ещё, не хватает условий для второго регистра, а то будет сверять со всеми данными и запрос будет работать дольше.
ВЫБРАТЬ    
    ЕстьNULL(ЗаявкиПоОтделам.НСБ, ЗаявкиПоОтделамФакт.НСБ) КАК НСБ,
    ЕстьNULL(ЗаявкиПоОтделам.Контрагент, ЗаявкиПоОтделамФакт.Контрагент) КАК Контрагент,
    ЕстьNULL(ЗаявкиПоОтделам.СуммаЛимита, ЗаявкиПоОтделамФакт.СуммаЛимита) КАК СуммаЛимита,
    ЕстьNULL(ЗаявкиПоОтделамФакт.СуммаФакт, 0) КАК СуммаФакт    
ИЗ
    ЗаявкиПоОтделам КАК ЗаявкиПоОтделам
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаявкиПоОтделамФакт КАК ЗаявкиПоОтделамФакт
        ПО (ЗаявкиПоОтделам.НСБ = ЗаявкиПоОтделамФакт.НСБ
            и ЗаявкиПоОтделам.Контрагент = ЗаявкиПоОтделамФакт.Контрагент)
ГДЕ
    ЗаявкиПоОтделамФакт.ПериодЛимита = &ПериодЛимита
    И ЗаявкиПоОтделамФакт.Участок = &Участок
    И ЗаявкиПоОтделам.ПериодЛимита = &ПериодЛимита
    И ЗаявкиПоОтделам.Участок = &Участок
Показать
24. DanDy 55 15.06.22 16:56 Сейчас в теме
(19)
Я не минусовал но думаю что так не сделать потому что если у вас будет 2 строки с одинаковыми "НСБ" и "Контрагент" в "ЗаявкиПоОтделам" и
2 строки с одинаковыми "НСБ" и "Контрагент" в "ЗаявкиПоОтделамФакт" то при их соединении вы получите не 2 строки а 4.
21. polax 15.06.22 16:17 Сейчас в теме
ыбрать НСБ, Контрагент, Сумма(СуммаЛимита), Сумма(СуммаФакт) из (ВЫБРАТЬ
    ЗаявкиПоОтделам.НСБ КАК НСБ,
    ЗаявкиПоОтделам.Контрагент КАК Контрагент,
    ЗаявкиПоОтделам.СуммаЛимита КАК СуммаЛимита,
    0 КАК СуммаФакт
ИЗ
    РегистрНакопления.ЗаявкиПоОтделам КАК ЗаявкиПоОтделам
ГДЕ
    ЗаявкиПоОтделам.ПериодЛимита = &ПериодЛимита
    И ЗаявкиПоОтделам.Участок = &Участок

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    ЗаявкиПоОтделамФакт,,
    ЗаявкиПоОтделамФакт.Контрагент,
    ЗаявкиПоОтделамФакт.СуммаЛимита,
    аявкиПоОтделамФакт.СуммаФакт
ИЗ
    РегистрНакопления.ЗаявкиПоОтделамФакт КАК ЗаявкиПоОтделамФакт
ГДЕ
    ЗаявкиПоОтделамФакт.ПериодЛимита = &ПериодЛимита
    И ЗаявкиПоОтделамФакт.Участок = &Участок) ВсеДанные
Группировать по ВсеДанные.НСБ, ВсеДанные.Контрагент
Показать
28. user1589890 24.06.22 06:02 Сейчас в теме
Всем спасибо! Добился я решения! Была правильная мысль о том что нужно было делать соединение а не объединение!!!
Оставьте свое сообщение

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