Я знаю, что это старый вопрос, но для этого есть гораздо более простое решение, которое можно выразить одним чистым SQL-запросом ... при условии, что он работает (поскольку некоторые функции SQL не работают в ABAP Open SQL) ...
В любом случае, чтобы получить критерии фильтрации, все, что вам нужно сделать, это сгруппировать по ключам, которые вы используете для поиска дубликатов (в данном случае ALTKN
, BUKRS
), и брать только группы, у которых count ( * )
(количество записей в группе) больше 1.
Затем используйте критерии фильтрации, чтобы получить нужные вам результаты.
Вот полный запрос, который решает проблему в данном конкретном случае:
Select kunnr from kna1 as outer_kna1
where exists (
"what you select here doesn't matter
Select 1 from kna1 inner join knb1 on kna1~kunnr = knb1~kunnr
where kna1~kunnr = outer_kna1~kunnr
group by ALTKN, BUKRS "Keys, by which duplicates are searched for
having count( * ) > 1 "Condition to only select duplicates (in this case, record count in a group is more than 1)
)
into table @lt_duplicate_account_data.
lt_kunnrs_of_duplicate_accounts
будет содержать клиентов kunnrs
, но если вам также нужны ALTKN
и BUKRS
, просто добавьте соединение в первичный запрос и добавьте соответствующие условия в подзапрос.
Select kunnr, altkn, bukrs from kna1 as outer_kna1
inner join outer_knb1 on outer_kna1~kunnr = outer_knb1~kunnr "added join
where exists (
"what you select here doesn't matter
Select kna1~kunnr from kna1 inner join knb1 on kna1~kunnr = knb1~kunnr
where kna1~kunnr = outer_kna1~kunnr
and altkn = outer_knb1~altkn and bukrs = outer_knb1~bukrs "added conditions
group by ALTKN, BUKRS "Keys, by which duplicates are searched for
having count( * ) > 1 "Condition to only select duplicates (in this case, record count in a group is more than 1)
)
into table @lt_duplicate_account_data.
person
Zero
schedule
16.05.2018