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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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