Текущее время: Пт, мар 29 2024, 10:24

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


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

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


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

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