Текущее время: Чт, авг 07 2025, 20:58

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Разбивка таблиц
СообщениеДобавлено: Пн, июл 13 2015, 10:45 
Ассистент
Ассистент

Зарегистрирован:
Вт, мар 26 2013, 19:24
Сообщения: 41
Добрый день! Очень срочно нужно, подскажите пож-та как быстрее всего можно из таблицы lt_anlz, получить две таблицы,
в первой должны быть записи с уникальным ANLN1 (остаться только те записи, встречающиеся только один раз по всем записям)
а во второй остальные, все записи в которых anln1 одно и тоже > 1раза. Учитывая то что записей около 80 тысяч. Спасибо заранее!


Code:
TYPES : BEGIN OF ls_main,

         BUKRS like ANLA-BUKRS,
         INVNR  like ANLA-INVNR,
         ANLN1 like ANLA-ANLN1,
         ANLN2  like ANLA-ANLN2,
         PRCTR  like ANLZ-PRCTR,
         ADATU  type ADATU,
         BDATU type BDATU,
         GLO_RUS_PRT_AMTR  like GLOFAATMDPNDNT-GLO_RUS_PRT_AMTR,
         GLO_RUS_PRT_PRVG like GLOFAATMDPNDNT-GLO_RUS_PRT_PRVG,
         GLO_RUS_PRT_EXMP  like GLOFAATMDPNDNT-GLO_RUS_PRT_EXMP,
         del,
        END OF ls_main.
DATA : lt_anlz TYPE TABLE OF ls_main.


Пробовал разные варианты, всегда очень долго...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Разбивка таблиц
СообщениеДобавлено: Пн, июл 13 2015, 11:03 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пн, май 14 2007, 13:05
Сообщения: 561
Откуда: Москва
1. вспомогательная табличка с ключевым полем ANLN1 и допполем кол-во.
2. Collect с единицей по полю ANLN1
3. loop по основной таблице с read table
...
5. profit

p.s. может возможно в момент sql-выборки обойтись sql командами?

_________________
Sapere aude!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Разбивка таблиц
СообщениеДобавлено: Пн, июл 13 2015, 11:09 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4871
Откуда: Москва
Пол: Мужской
Получается, вам нужен аналог count(*) group by для внутренних таблиц.
Ну тогда получается объявляем hashed table lt_anlz_group с ключем, который вам нужен для group by и числовым полем для числа найденных строк.
Далее цикл по вашей lt_anlz, внутри него читаем по ключу lt_anlz_group, если ничего не нашли- записываем туда новую строку ср счетчиком 1, иначе увеличиваем счетчик на 1.
Потом второй цикл по lt_anlz, опять же читаем lt_anlz_group. Если счетчик больше 1 - кидаем в одну таблицу, если = 1 - в другую.

Наверное, можно и побыстрее алгоритм сделать (объединить два цикла), но на 80 000 строк вполне сойдет, за несколько секунд максимум должен отработать.

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


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

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
juster87 написал(а):
Добрый день! Очень срочно нужно, подскажите пож-та как быстрее всего можно из таблицы lt_anlz, получить две таблицы,
в первой должны быть записи с уникальным ANLN1 (остаться только те записи, встречающиеся только один раз по всем записям)
а во второй остальные, все записи в которых anln1 одно и тоже > 1раза. Учитывая то что записей около 80 тысяч. Спасибо заранее!
...
Пробовал разные варианты, всегда очень долго...

Если INVNR для ANLN1 один и тот же, то воспользуйтесь AT NEW anln1.. AT END OF anln1.
В 1-й таблице останутся записи с неуникальным ANLN1, в lt_anlz_uniq - с уникальными.
Code:
DATA: lt_anlz_uniq LIKE STANDARD TABLE OF ls_main,
          lv_tabix TYPE sy-tabix.
SORT lt_anlz BY bukrs invnr anln1.
LOOP AT lt_anlz INTO ls_main.
  AT NEW anln1.
    CLEAR lv_cnt.
    lv_tabix = sy-tabix.
  ENDAT.
  ADD 1 TO lv_cnt.
  AT END OF lt_anlz.
    IF lv_cnt = 1.
      INSERT ls_main INTO TABLE lt_anlz_uniq.
      DELETE lt_anlz INDEX lv_tabix. "Только если 2-я таблица для неуникальных значений не нужна
*{ Если вдруг обязательно нужна 2-я таблица для неуникальных значений
    ELSE.
      APPEND LINES OF lt_anlz FROM lv_tabix TO sy-tabix TO lv_anlz_multi.
*}
    ENDIF.
  ENDAT.
ENDLOOP.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Разбивка таблиц
СообщениеДобавлено: Пн, июл 13 2015, 22:07 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4871
Откуда: Москва
Пол: Мужской
Удав, у вас, конечно, вариант поизящнее, но мне кажется, что мой на большом числе записей будет побыстрее.
У команды sort оценка сложности O(n*ln(n)), у меня вроде больше O(n) не набегает.
Но для автора вопроса с 80 000 записей это конечно теоретические изыски, и так и так будет быстро.

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


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

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
LKU написал:
Но для автора вопроса с 80 000 записей это конечно теоретические изыски, и так и так будет быстро.

Как показывает практика, временем выполнения в обоих вариантах можно пренебречь :pivo:

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Разбивка таблиц
СообщениеДобавлено: Вт, июл 14 2015, 06:43 
Ассистент
Ассистент

Зарегистрирован:
Вт, мар 26 2013, 19:24
Сообщения: 41
Всем спасибо, очень хорошие варианты, стало работать гораздо быстрее.


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

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


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

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


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

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