Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как в запросе при соед-нии "один ко многим" поместить результаты в колонки, а не в строки?

Как в запросе при соед-нии "один ко многим" поместить результаты в колонки, а не в строки?
Я
   Механик
 
23.07.20 - 10:00
Возьмём типовой справочник "Номенклатура" из УНФ, в нём есть ТЧ "Дополнительные реквизиты". Видов реквизитов для номенклатуры - 10 штук. Если сделать такой запрос:

"ВЫБРАТЬ
    |    Товары.Ссылка КАК Ссылка,
    |    НоменклатураДополнительныеРеквизиты.Свойство КАК Свойство,
    |    НоменклатураДополнительныеРеквизиты.Значение КАК Значение
    |ИЗ
    |    Справочник.Номенклатура КАК Товары
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
    |        ПО НоменклатураДополнительныеРеквизиты.Ссылка = Товары.Ссылка
    |ГДЕ
    |    Товары.ЭтоГруппа = ЛОЖЬ";

В выборке будет таблица с несколькими строками, где будет заполнено дополнительными значениями, а также NULL`ами, если значение доп. реквизита у конкретной номенклатуры отсутствует. И одна и та же номенклатуры будет выведена несколько раз.

А как лучше и проще сделать, чтобы в выборке номенклатура выводилась единожды, а для каждого значения доп. реквизита выводилась отдельная колонка в этой же строке?

Отдельную колонку с заранее известным именем доп. реквизита вывожу так:

    "ВЫБРАТЬ
    |    Товары.Ссылка КАК Ссылка,
    |    ЕСТЬNULL(ВЫБОР
    |            КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &АртикулПоставщика
    |                ТОГДА ЕСТЬNULL(НоменклатураДополнительныеРеквизиты.Значение, """")
    |        КОНЕЦ, """") КАК АртикулПоставщика
    |ИЗ
    |    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары
    |        ПО НоменклатураДополнительныеРеквизиты.Ссылка = Товары.Ссылка
    |ГДЕ
    |    Товары.ЭтоГруппа = ЛОЖЬ";

Но как сделать, чтобы все доп. реквизиты в одну строку с владельцем-товаром "свернулись"?
   Механик
 
1 - 23.07.20 - 10:03
(0) То есть чтобы в итоге в выборке было:

Товар1|ЗначениеДопРеквизита1|ЗначениеДопРеквизита2|ЗначениеДопРеквизита3||ЗначениеДопРеквизита4
Товар2|ЗначениеДопРеквизита1|ЗначениеДопРеквизита2|ЗначениеДопРеквизита3||ЗначениеДопРеквизита4
   Aleksey
 
2 - 23.07.20 - 10:05
типизировать колонки. Т.е. в каждую колонку получать конкретное свойство
   hhhh
 
3 - 23.07.20 - 10:08
(1) |ИЗ
    |    Справочник.Номенклатура КАК Товары
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты1
    |        ПО НоменклатураДополнительныеРеквизиты1.Ссылка = Товары.Ссылка 
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты2
    |        ПО НоменклатураДополнительныеРеквизиты2.Ссылка = Товары.Ссылка    
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты3
    |        ПО НоменклатураДополнительныеРеквизиты3.Ссылка = Товары.Ссылка
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты4
    |        ПО НоменклатураДополнительныеРеквизиты4.Ссылка = Товары.Ссылка
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты5
    |        ПО НоменклатураДополнительныеРеквизиты5.Ссылка = Товары.Ссылка
   Aleksey
 
4 - 23.07.20 - 10:30
(3) Почти только в каждом левом соединение указать свойство

Допустим вам нужно вывести из доп реквизитов только вес, как бы вы в запросе сделали?

А теперь вес и масса

А теперь вес, масса и ....
   D_E_S_131
 
5 - 23.07.20 - 13:56
|ИЗ
    |    Справочник.Номенклатура КАК Товары
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты1
    |        ПО НоменклатураДополнительныеРеквизиты1.Ссылка = Товары.Ссылка И НоменклатураДополнительныеРеквизиты1.Свойство = &СвойствоВес
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты2
    |        ПО НоменклатураДополнительныеРеквизиты2.Ссылка = Товары.Ссылка И НоменклатураДополнительныеРеквизиты2.Свойство = &СвойствоМасса
   Garykom
 
6 - 23.07.20 - 14:00
Можно через Когда
   Garykom
 
7 - 23.07.20 - 14:01
   bootini
 
8 - 24.07.20 - 09:10
"ВЫБРАТЬ
    |    Товары.Ссылка КАК Ссылка,
    |    МАКСИМУМ(ВЫБОР
    |            КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &АртикулПоставщика
    |                ТОГДА ЕСТЬNULL(НоменклатураДополнительныеРеквизиты.Значение, """")
    |        КОНЕЦ, """") КАК АртикулПоставщика,
    |    МАКСИМУМ(ВЫБОР
    |            КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &АртикулКлиента
    |                ТОГДА ЕСТЬNULL(НоменклатураДополнительныеРеквизиты.Значение, """")
    |        КОНЕЦ, """") КАК АртикулКлиента
    |ИЗ
    |    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары
    |        ПО НоменклатураДополнительныеРеквизиты.Ссылка = Товары.Ссылка
    |ГДЕ
    |    Товары.ЭтоГруппа = ЛОЖЬ"
СГРУППИРОВАТЬ ПО
    Товары.Ссылка;



как то так
   Конструктор1С
 
9 - 24.07.20 - 09:30
(0) только через СКД. В запросах 1с нет PIVOT или чего-то подобного

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.