• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Вопрос по запросу

  • Автор темы konst
  • Дата начала
Статус
Закрыто для дальнейших ответов.
K

konst

Делаю запрос (необходимо получить выборку содержащую номенклатуру и все типы цен для нее, если тип цен не установлен цена =0)
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Наименование,
ЦеныНоменклатурыСрезПоследних.Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
ЦеныНоменклатурыСрезПоследних.ТипЦен КАК ТипЦен
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК ЦеныНоменклатурыСрезПоследних
ПОЛНОЕ СОЕДИНЕНИЕ Справочник.ТипыЦенНоменклатуры КАК ТипыЦенНоменклатуры
ПО ЦеныНоменклатурыСрезПоследних.ТипЦен = ТипыЦенНоменклатуры.Ссылка
ИТОГИ ПО
Наименование ИЕРАРХИЯ

Затем вывожу результат в ДеревоЗначений
Получаю примерно следующее
Группа
Номенклатура1
Номенклатура1 Опт1
Номенклатура2
Номенклатура2 Опт2

Для Номенклатура1 тип цен Опт2 не определен (отсутствует в регистре движение)
Для Номенклатура2 тип цен Опт1 не определен

Никак не могу добиться того чтоб было

Группа
Номенклатура1
Номенклатура1 Опт1
Номенклатура1 Опт2
Номенклатура2
Номенклатура2 Опт1
Номенклатура2 Опт2

Дело в том что для номенклатуры, если не установлен тип цен, то она не попадает в результат выборки, а мне необходимо чтоб если для номенклатуры не установлен тип цен она попадала в выборку

Подскажите плиз
 
U

unknown181538

Предлагаю сделать вложенный запрос, в котором будет создаваться декартово произведение элементов номенклатуры с элементами справочника типы цен, а затем к этому запросу левым соединением подсоединять значения цен.

<!--shcode--><pre><code class=','>ВЫБРАТЬ РАЗЛИЧНЫЕ
ВложенныйЗапрос.Номенклатура,
ВложенныйЗапрос.ТипЦен,
ЦеныНоменклатурыСрезПоследних.Цена
ИЗ
(ВЫБРАТЬ
Номенклатура.Ссылка КАК Номенклатура,
ТипыЦенНоменклатуры.Ссылка КАК ТипЦен
ИЗ
Справочник.ТипыЦенНоменклатуры КАК ТипыЦенНоменклатуры,
Справочник.Номенклатура КАК Номенклатура) КАК ВложенныйЗапрос
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК ЦеныНоменклатурыСрезПоследних
ПО ВложенныйЗапрос.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
И ВложенныйЗапрос.ТипЦен = ЦеныНоменклатурыСрезПоследних.ТипЦен[/CODE]
Без слова РАЗЛИЧНЫЕ почему-то задваиваются строки, где есть тип цен. Почему - так и не понял.
 
T

tanat

1) Думаю, ЦеныНоменклатурыСрезПоследних.Цена - лишнее, 2 раза к одной таблице обращаемся, проще доставать из вложенного запроса.
2)Задваиваются, потому что вы используете вкачестве источника таблицу, в которую включены парные записи. если наложить на вложенный запрос "различные" то результат должен быть тотже). Или попробовать ВНУТРЕННЕЕ соединение. А по поводу
сли тип цен не установлен цена =0
то тут нужно использовать вычисляемое поле, которое примерно будет выглядеть так:
одно поле - ЕСТЬNULL(ВложенныйЗапрос.ТипЦен,0) как типЦен, //вместо ВложенныйЗапрос.ТипЦен,
второе - ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена,0) как Цена // соответствено вместо Цены

Вобщем, почитайте в синтаксис-помошнике, там все есть). Вытягивайте через "Содержание", так будет проще
 
U

unknown181538

1) Думаю, ЦеныНоменклатурыСрезПоследних.Цена - лишнее, 2 раза к одной таблице обращаемся, проще доставать из вложенного запроса.
Где два раза?
2)Задваиваются, потому что вы используете вкачестве источника таблицу, в которую включены парные записи.
Если выполнить отдельно сложенный запрос - парных записей в нем нет.
 
T

tanat

Вы правы, не внимателен был).

Но по поводу вычисляемых полей - все в силе пока остается).
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!