Текущее время: Вт, июн 17 2025, 23:33

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: SELECT во вложенную таблицу
СообщениеДобавлено: Пт, сен 06 2024, 12:08 
Специалист
Специалист

Зарегистрирован:
Пт, сен 09 2011, 11:47
Сообщения: 116
Всем привет!
Возможно ли выбрать из БД во внутреннюю таблицу записи, чтобы номер документа был столбцом, а позиции вложенной таблицей(не структурой).
Пробовал разные варианты к успеху не пришел. Может кто знает и подскажет.

Пример в БД имеем следующие записи (таблица EKPO).
EBELN EBELP
4500123 00001
4500123 00002
4500345 00001
4500345 00002
4500345 00003

Выбрать одним SELECT в виде:
Запись 1
EBELN = 4500123
EBELP_TAB = [0001, 0002]
Запись 2
EBELN = 4500234
EBELP_TAB = [0001, 0002, 0003]

Конечно могу обойти другими вариантами, например, выбрать отдельно заголовки во внут.табл1 и отдельно позиции во внут.табл2 или выбрать в одну таблицу большим списком(заголовок + позиции) в потом применить LOOP AT GROUP BY.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: SELECT во вложенную таблицу
СообщениеДобавлено: Пт, сен 06 2024, 15:34 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4871
Откуда: Москва
Пол: Мужской
Нет. Select к реляционным данным всегда возвращает таблицу, и в ABAP то же самое.
Чтобы получить то что вы хотите, можно сначала селектом к БД получить плоскую внутреннюю таблицу со столбцами EBELN EBELP, а потом уже средствами ABAP её переносить в другую, более сложную структуру данных.
Например, см. оператор loop at ITAB group by - у него немного замороченный синтаксис, но как раз для таких задач очень удобно.

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SELECT во вложенную таблицу
СообщениеДобавлено: Пт, сен 06 2024, 18:18 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 09:41
Сообщения: 180
Если версия абапа сравнительно новая, то, возможно подойдёт вариант с аггрегацией позиций:
Code:
  SELECT FROM dd03l
    FIELDS tabname, string_agg( position, ',' ) AS position
    WHERE tabname LIKE 'DD03%'
    GROUP BY tabname
    INTO TABLE @DATA(lt_data).

Но если поле position получится больше 1333 символов, то будет дамп.

А во внутреннюю таблицу можно будет быстро преобразовать при помощи SPLIT <ls_data>-position AT ',' INTO TABLE DATA(<ls_data>-t_position).


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: SELECT во вложенную таблицу
СообщениеДобавлено: Пт, сен 06 2024, 19:15 
Модератор
Модератор

Зарегистрирован:
Пн, июн 27 2011, 08:25
Сообщения: 479
1варинант) Сделать MESH и два селекта (из заголовка и из позиции).

2вариант) отправить на AMDP


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: SELECT во вложенную таблицу
СообщениеДобавлено: Пт, сен 06 2024, 19:25 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
kiber_DyX написал(а):
Всем привет!
Возможно ли выбрать из БД во внутреннюю таблицу записи, чтобы номер документа был столбцом, а позиции вложенной таблицей(не структурой).
Пробовал разные варианты к успеху не пришел. Может кто знает и подскажет.

Пример в БД имеем следующие записи (таблица EKPO).
EBELN EBELP
4500123 00001
4500123 00002
4500345 00001
4500345 00002
4500345 00003

Выбрать одним SELECT в виде:
Запись 1
EBELN = 4500123
EBELP_TAB = [0001, 0002]
Запись 2
EBELN = 4500234
EBELP_TAB = [0001, 0002, 0003]

Конечно могу обойти другими вариантами, например, выбрать отдельно заголовки во внут.табл1 и отдельно позиции во внут.табл2 или выбрать в одну таблицу большим списком(заголовок + позиции) в потом применить LOOP AT GROUP BY.

Как вариант из ранних времен SELECT .. ENSELECT с рассовыванием данных во вложенные структуры
Code:
SELECT ...
INTO CORRESPONDING FIELDS OF ls_...
FROM ...
INNER JOIN ...
WHERE ...

  READ TABLE lt_ ASSIGNING <ls_> WHITH KEY key_field = ls_...-key_field BINARY SEARCH,
  IF SY-SUBRC <> 0.
    INSERT ... INTO lt_.. ASSIGNING <ls_...> INDEX sy-tabix.
  ENDIF.
  MOVE-CORRESPONDING ls_... TO ls_pos.
  INSERT ls_pos INTO TABLE <ls_...>-pos.
ENDSELECT.


PS: Ну и надо идти от цели: что вы дальше с этим делать будете? По XML рассовывать?

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB