Текущее время: Вт, мар 19 2024, 07:05

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Узнать количество строк внутренней таблицы
СообщениеДобавлено: Вт, июн 19 2018, 12:50 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, апр 17 2006, 11:03
Сообщения: 123
предполагаю, что самый быстрый способ будет таким

Code:
TYPES:
  BEGIN OF ts_data,
    f1 TYPE string,
    f2 TYPE i,
  END OF ts_data.

DATA:
      lt_data TYPE STANDARD TABLE OF ts_data WITH DEFAULT KEY
        WITH NON-UNIQUE SORTED KEY key1 COMPONENTS f1
        WITH NON-UNIQUE SORTED KEY key2 COMPONENTS f2
        WITH NON-UNIQUE SORTED KEY key3 COMPONENTS f1 f2.

lt_data = VALUE #(
  ( f1 = '14124' f2 = 1 )
  ( f1 = '12341' f2 = 1 )
  ( f1 = '15242' f2 = 1 )
  ( f1 = '21413' f2 = 2 )
  ( f1 = '12132' f2 = 3 ) ).

DATA(lv_count) = lines( FILTER #( lt_data USING KEY key1 WHERE f1 = |15242| ) ).
WRITE / lv_count.

lv_count = lines( FILTER #( lt_data USING KEY key2 WHERE f2 = 1 ) ).
WRITE / lv_count.

lv_count = lines( FILTER #( lt_data USING KEY key3 WHERE f1 <> |15242| AND f2 > 1  ) ).
WRITE / lv_count.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Узнать количество строк внутренней таблицы
СообщениеДобавлено: Вт, июн 19 2018, 13:04 
Ассистент
Ассистент

Зарегистрирован:
Вт, мар 20 2018, 11:16
Сообщения: 27
Besa написал:
Обработайте вне цикла данные, создав агрегационную таблицу, к ней уже обратитесь через read table внутри основного цикла.


Я решил удалил дубликаты с помощью DELETE ADJACENT DUPLICATES, теперь мне необходимо подсчитать сколько значений по каждому из дубликатов в другой таблице, как сделать это без loop не понимаю. Через read table же нельзя задать несколько условий?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Узнать количество строк внутренней таблицы
СообщениеДобавлено: Вт, июн 19 2018, 13:28 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, апр 17 2006, 11:03
Сообщения: 123
Если без LOOP, но с FOR ?
Code:
lv_count = REDUCE i( INIT count = 0 FOR wa IN lt_data WHERE ( f2 = 1 ) NEXT count = count + 1 ).
WRITE / lv_count.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Узнать количество строк внутренней таблицы
СообщениеДобавлено: Пт, июн 22 2018, 00:26 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3074
Откуда: Москва
baboon написал(а):
To Kuranov.Dmitry
Цитата:
с несортированными таблицами такой трюк не сработает даже если их сортировать вручную.

Вообще-то, сработает, если отсортировать вручную
и сделать чтение с binary search по ключу сортировки.

+
Я так оптимизировал разделение внутренней таблицы из MSEG по особому запасу. :pivo:

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Узнать количество строк внутренней таблицы
СообщениеДобавлено: Пт, июл 20 2018, 15:42 
Специалист
Специалист

Зарегистрирован:
Вт, дек 30 2008, 18:10
Сообщения: 171
Пол: Мужской
Code:
data: begin of lt_rows occurs 0,
        field1 type string,
        field2 type string,
      end of lt_rows.

data field2 type string.

lt_rows[] = value #(
( field1 = 14124 field2 = 1 )
( field1 = 12341 field2 = 2 )
( field1 = 15242 field2 = 3 )
( field1 = 21413 field2 = 1 )
( field1 = 12132 field2 = 3 )
( field1 = 4444  field2 = 2 )
( field1 = 4444  field2 = 4 )
( field1 = 4444  field2 = 2 )
( field1 = 4444  field2 = 2 )
( field1 = 4444  field2 = 2 )
( field1 = 5555  field2 = 3 )
).

loop at lt_rows into data(d_rows)
   GROUP BY ( field2 = d_rows-field2
               size = group size )
  REFERENCE INTO DATA(group_ref).

  write: / group_ref->field2, group_ref->size.
endloop.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Узнать количество строк внутренней таблицы
СообщениеДобавлено: Пт, авг 03 2018, 15:35 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, окт 15 2010, 14:06
Сообщения: 292
author написал(а):
Если без LOOP, но с FOR ?
Code:
lv_count = REDUCE i( INIT count = 0 FOR wa IN lt_data WHERE ( f2 = 1 ) NEXT count = count + 1 ).
WRITE / lv_count.

Чтобы предлагать такие финты, неплохо бы у автора спросить его версию базисного компонента.
А то, м.б., у вас 7.50, а у него какой-нибудь древнючий 4.7. И у него система просто не поймёт REDUCE.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу Пред.  1, 2

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


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

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


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

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