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

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


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

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


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

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