Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
05 окт 2022, 08:22

Как исключить из запроса лишние позиции?

Автор VID1234, 06 апр 2022, 15:05

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

VID1234

Здравствуйте. Подскажите пожалуйста есть такой запрос:

ВЫБРАТЬ РАЗЛИЧНЫЕ
    КадроваяИсторияСотрудников.Сотрудник КАК Сотрудник,
    ВложенныйЗапрос1.ВидОбразования КАК ВидОбразования
ИЗ
    РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
            ОбразованиеФизическихЛиц.Владелец КАК Владелец,
            ЕСТЬNULL(ВЫБОР
                    КОГДА ОбразованиеФизическихЛиц.ВидОбразования.Наименование ПОДОБНО "%Высшее%"
                        ТОГДА ОбразованиеФизическихЛиц.ВидОбразования.Наименование
                    КОГДА ОбразованиеФизическихЛиц.ВидОбразования.Наименование ПОДОБНО "%Среднее%"
                            И НЕ ОбразованиеФизическихЛиц.ВидОбразования.Наименование ПОДОБНО "%Высшее%"
                        ТОГДА ОбразованиеФизическихЛиц.ВидОбразования.Наименование
                    КОГДА (НЕ ОбразованиеФизическихЛиц.ВидОбразования.Наименование ПОДОБНО "%Высшее%"
                            ИЛИ НЕ ОбразованиеФизическихЛиц.ВидОбразования.Наименование ПОДОБНО "%Среднее%")
                        ТОГДА "Прочее"
                КОНЕЦ, "Нет") КАК ВидОбразования
        ИЗ
            Справочник.ОбразованиеФизическихЛиц КАК ОбразованиеФизическихЛиц
       
        СГРУППИРОВАТЬ ПО
            ОбразованиеФизическихЛиц.Владелец,
            ОбразованиеФизическихЛиц.ВидОбразования.Наименование,
            ОбразованиеФизическихЛиц.ВидОбразования) КАК ВложенныйЗапрос1
        ПО (КадроваяИсторияСотрудников.ФизическоеЛицо = ВложенныйЗапрос1.Владелец)
ГДЕ
    КадроваяИсторияСотрудников.ВидСобытия = &ВидСобытия
    И КадроваяИсторияСотрудников.Период <= &Период


Как прописать, если есть высшее образование, то выводить только его в результат, если его нет, то среднее, если среднего нет, а прочее, то "Прочее", а если NULL то "Нет", а то у меня задраиваются сотрудники, получается на одно и тоже лицо 2 результата, в одном высшее, а в другом "Прочее", NULL вообще убрать не могу!

nvj84

Метаданные: ФизическиеЛица(справочник), ОбразованиеФизическихЛиц(справочник), ВидыОбразования(перечисление).
ВидыОбразования заполнено следующими данными: Высшее, Среднее, Прочее, Нет. В запросе использовал стандартный реквизит перечислений Порядок, поэтому в данном случае важна очередность. Нумерация начинается с 0 и значит четвертому элементу "Нет" соответствует 3.
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);
Запрос.УстановитьПараметр("ПорядокНет", 3);
Запрос.Текст =
"ВЫБРАТЬ
| ФизическиеЛица.Ссылка КАК Сотрудник
|ПОМЕСТИТЬ ВТ_ВыбранныеСотрудники
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица
|ГДЕ
| ФизическиеЛица.Ссылка В(&СписокСотрудников)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВидыОбразования.Ссылка КАК ВидОбразования,
| ВидыОбразования.Порядок КАК Порядок
|ПОМЕСТИТЬ ВТ_ВидыОбразованияПорядок
|ИЗ
| Перечисление.ВидыОбразования КАК ВидыОбразования
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ВыбранныеСотрудники.Сотрудник КАК Сотрудник,
| ОбразованиеФизическихЛиц.ВидОбразования КАК ВидОбразования
|ПОМЕСТИТЬ ВТ_ВыбранныеСотрудникиВидыОбразования
|ИЗ
| ВТ_ВыбранныеСотрудники КАК ВТ_ВыбранныеСотрудники
| ПОЛНОЕ СОЕДИНЕНИЕ Справочник.ОбразованиеФизическихЛиц КАК ОбразованиеФизическихЛиц
| ПО ВТ_ВыбранныеСотрудники.Сотрудник = ОбразованиеФизическихЛиц.Владелец
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ВыбранныеСотрудникиВидыОбразования.Сотрудник КАК Сотрудник,
| МИНИМУМ(ЕСТЬNULL(ВТ_ВидыОбразованияПорядок.Порядок, &ПорядокНет)) КАК Порядок
|ПОМЕСТИТЬ ВТ_ВыбранныеСотрудникиПорядокВременная
|ИЗ
| ВТ_ВыбранныеСотрудникиВидыОбразования КАК ВТ_ВыбранныеСотрудникиВидыОбразования
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ВидыОбразованияПорядок КАК ВТ_ВидыОбразованияПорядок
| ПО ВТ_ВыбранныеСотрудникиВидыОбразования.ВидОбразования = ВТ_ВидыОбразованияПорядок.ВидОбразования
|
|СГРУППИРОВАТЬ ПО
| ВТ_ВыбранныеСотрудникиВидыОбразования.Сотрудник
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ВыбранныеСотрудникиПорядокВременная.Сотрудник КАК Сотрудник,
| ВТ_ВидыОбразованияПорядок.ВидОбразования КАК ВидОбразования
|ИЗ
| ВТ_ВыбранныеСотрудникиПорядокВременная КАК ВТ_ВыбранныеСотрудникиПорядокВременная
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ВидыОбразованияПорядок КАК ВТ_ВидыОбразованияПорядок
| ПО ВТ_ВыбранныеСотрудникиПорядокВременная.Порядок = ВТ_ВидыОбразованияПорядок.Порядок
|
|УПОРЯДОЧИТЬ ПО
| Сотрудник
|АВТОУПОРЯДОЧИВАНИЕ";


Теги:

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

Рейтинг@Mail.ru Rambler's Top100

Поиск