Удаление дубликатов во внутренней таблице

В такой строке кода нет ничего удивительного:

delete adjacent duplicates from lt_table.

Здесь всё просто и понятно. Дубликаты удаляются, уникальные записи остаются.

Однако если попытаться с помощью добавки comparing удалять дубликаты только по нужным полям, то есть свои тонкости:

delete adjacent duplicates from lt_bseg comparing lifnr zuonr.

Тонкость первая: Дубликаты могут и не совсем удалиться. Удаление будет происходить только в сортированной последовательности. Таким образом результат будет слабопредсказуемым. То есть из последовательности А-А-Б-Б-А-А будет создана последовательность А-Б-А.

Тонкость вторая: Дубликаты удаляются после первого совпадения. Таким образом во внутренней таблице будет оставлено именно первое совпадение.

Следовательно вместо вышеуказанного примера кода всегда следует писать примерно так:

sort lt_bseg by lifnr zuonr zfbdt.
delete adjacent duplicates from lt_bseg comparing lifnr zuonr.

Больше полей в операторе SORT даёт большую предсказуемость и адекватность результата.

Опубликовано 19.05.2010 в 17:23 · Автор ivan · Ссылка
Рубрики: ABAP

Один комментарий

Подписаться на комментарии по RSS

  1. Написал(-а) chizz
    21.08.2013 в 13:36
    Ссылка

    thanks!

Подписаться на комментарии по RSS

Написать комментарий