Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 04:23

Как объединить таблицы?

Автор d1269783, 21 мар 2018, 08:23

0 Пользователей и 1 гость просматривают эту тему.

d1269783

Добрый день, возникла проблема с запросом, есть 2 регистра сведений: расписание и даты, в каждой из них 1 измерение "Номенклатура" и 1 ресурс "ЦенаДо" в 1 "Дата"  во 2-м регистре. При запросе ниже, появляться результат (на скриншоте), теперь, каким образом их можно объединить, то есть, чтобы убрались дубли и каждой номенклатуре соотвествовала цена и дата?
"ВЫБРАТЬ Цена.Дисциплина КАК Дисциплина, Цена.ЦенаПосле КАК ЦенаПосле, 0 КАК Дата ИЗ РегистрСведений.Цена КАК Цена ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ Даты.Дисциплина, 0, Даты.Дата ИЗ РегистрСведений.Даты КАК Даты

sertak

Сделать через полное соединение

ЕСТЬNULL(т1.Ном,т2.Ном) КАК Ном,
т1.цыаыва,
т2.ываывав
ИЗ т1
ПОЛНОЕ СОЕДИНЕНИЕ т2
ПО т1.Ном = т2.Ном


Но только если ном - единственное измерение в каждом регистре.

d1269783

Цитата: sertak от 21 мар 2018, 08:47
Сделать через полное соединение
А возможно без этих соединений? В будущем планирую добавить ещё несколько таблиц в запрос, используя временную таблицу

sertak

Можно сделать временную таблицу на основании данных вашего запроса, а в следующем запросе пакета сгруппировать ее по номенклатуре, применив к остальным полям, например, Максимум, но этот вариант мне не нравится, т.к. остальные поля у вас не числовые.
С количеством обычно такое хорошо проходит, применяют агрегатную функция Сумма. А с датами надо быть осторожным, тогда вместо нулей в заглушки нужно внести значение по умолчанию для нужного типа, например ДАТАВРЕМЯ(1,1,1)


ВЫБРАТЬ Цена.Дисциплина КАК Дисциплина, Цена.ЦенаПосле КАК ЦенаПосле, ДАТАВРЕМЯ(1,1,1) КАК Дата
ПОМЕСТИТЬ вт
ИЗ РегистрСведений.Цена КАК Цена
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ Даты.Дисциплина, 0, Даты.Дата
ИЗ РегистрСведений.Даты КАК Даты
;
//////////////////
ВЫБРАТЬ
вт.Дисциплина,
МАСИМУМ(вт.ЦенаПосле,
МАСИМУМ(вт.Дата)
ИЗ вт
СГРУППИРОВАТЬ ПО Дисциплина


типа такого, отладьте

d1269783

Цитата: sertak от 21 мар 2018, 08:51
Можно сделать временную таблицу на основании данных вашего запроса, а в следующем запросе пакета сгруппировать ее по номенклатуре, применив к остальным полям, например, Максимум, но этот вариант мне не нравится, т.к. остальные поля у вас не числовые.
С количеством обычно такое хорошо проходит, применяют агрегатную функция Сумма. А с датами надо быть осторожным, тогда вместо нулей в заглушки нужно внести значение по умолчанию для нужного типа, например ДАТАВРЕМЯ(1,1,1)

Можете предоставить примерный код, если не затруднит?
Добавлено: 21 мар 2018, 08:56


Цитата: sertak от 21 мар 2018, 08:51
Можно сделать временную таблицу на основании данных вашего запроса, а в следующем запросе пакета сгруппировать ее по номенклатуре, применив к остальным полям, например, Максимум, но этот вариант мне не нравится, т.к. остальные поля у вас не числовые.
С количеством обычно такое хорошо проходит, применяют агрегатную функция Сумма. А с датами надо быть осторожным, тогда вместо нулей в заглушки нужно внести значение по умолчанию для нужного типа, например ДАТАВРЕМЯ(1,1,1)

ВЫБРАТЬ Цена.Дисциплина КАК Дисциплина, Цена.ЦенаПосле КАК ЦенаПосле, ДАТАВРЕМЯ(1,1,1) КАК Дата
ПОМЕСТИТЬ вт
ИЗ РегистрСведений.Цена КАК Цена
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ Даты.Дисциплина, 0, Даты.Дата
ИЗ РегистрСведений.Даты КАК Даты
;
//////////////////
ВЫБРАТЬ
вт.Дисциплина,
МАСИМУМ(вт.ЦенаПосле,
МАСИМУМ(вт.Дата)
ИЗ вт
СГРУППИРОВАТЬ ПО Дисциплина

типа такого
Спасибо
Добавлено: 21 мар 2018, 08:58


Цитата: sertak от 21 мар 2018, 08:51
Можно сделать временную таблицу на основании данных вашего запроса, а в следующем запросе пакета сгруппировать ее по номенклатуре, применив к остальным полям, например, Максимум, но этот вариант мне не нравится, т.к. остальные поля у вас не числовые.
С количеством обычно такое хорошо проходит, применяют агрегатную функция Сумма. А с датами надо быть осторожным, тогда вместо нулей в заглушки нужно внести значение по умолчанию для нужного типа, например ДАТАВРЕМЯ(1,1,1)


ВЫБРАТЬ Цена.Дисциплина КАК Дисциплина, Цена.ЦенаПосле КАК ЦенаПосле, ДАТАВРЕМЯ(1,1,1) КАК Дата
ПОМЕСТИТЬ вт
ИЗ РегистрСведений.Цена КАК Цена
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ Даты.Дисциплина, 0, Даты.Дата
ИЗ РегистрСведений.Даты КАК Даты
;
//////////////////
ВЫБРАТЬ
вт.Дисциплина,
МАСИМУМ(вт.ЦенаПосле,
МАСИМУМ(вт.Дата)
ИЗ вт
СГРУППИРОВАТЬ ПО Дисциплина


типа такого, отладьте
Ожидается выражение ), 13 строка "ИЗ вт"
Добавлено: 21 мар 2018, 09:01


Цитата: sertak от 21 мар 2018, 08:51
Можно сделать временную таблицу на основании данных вашего запроса, а в следующем запросе пакета сгруппировать ее по номенклатуре, применив к остальным полям, например, Максимум, но этот вариант мне не нравится, т.к. остальные поля у вас не числовые.
С количеством обычно такое хорошо проходит, применяют агрегатную функция Сумма. А с датами надо быть осторожным, тогда вместо нулей в заглушки нужно внести значение по умолчанию для нужного типа, например ДАТАВРЕМЯ(1,1,1)


ВЫБРАТЬ Цена.Дисциплина КАК Дисциплина, Цена.ЦенаПосле КАК ЦенаПосле, ДАТАВРЕМЯ(1,1,1) КАК Дата
ПОМЕСТИТЬ вт
ИЗ РегистрСведений.Цена КАК Цена
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ Даты.Дисциплина, 0, Даты.Дата
ИЗ РегистрСведений.Даты КАК Даты
;
//////////////////
ВЫБРАТЬ
вт.Дисциплина,
МАСИМУМ(вт.ЦенаПосле,
МАСИМУМ(вт.Дата)
ИЗ вт
СГРУППИРОВАТЬ ПО Дисциплина


типа такого, отладьте


ВЫБРАТЬ
Цена.Дисциплина КАК Дисциплина,
  Цена.ЦенаПосле КАК ЦенаПосле,
  ДАТАВРЕМЯ(1,1,1) КАК Дата
ПОМЕСТИТЬ вт
ИЗ РегистрСведений.Цена КАК Цена
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ Даты.Дисциплина, 0, Даты.Дата
ИЗ РегистрСведений.Даты КАК Даты
;
//////////////////
ВЫБРАТЬ
вт.Дисциплина,
МАКСИМУМ(вт.ЦенаПосле),
МАКСИМУМ(вт.Дата)
ИЗ вт
СГРУППИРОВАТЬ ПО Дисциплина


Были ошибки в скобках и словах Максимум, спасибо:)

sertak

Цитата: d1269783 от 21 мар 2018, 08:53
Были ошибки в скобках и словах Максимум, спасибо:)
Отлично.

d1269783

Цитата: sertak от 21 мар 2018, 09:02
Это на коленке набросано, вы проверьте синтаксис и т.д. Я подал идею, как именно можно реализовать вашу задачу.
Добавлено: 21 мар 2018, 09:03


Цитата: d1269783 от 21 мар 2018, 08:53
Были ошибки в скобках и словах Максимум, спасибо:)
Отлично.
Ещё раз спасибо!

Похожие темы (5)

Рейтинг@Mail.ru

Поиск