#sql #count #abap #cds
#sql #количество #abap #cds
Вопрос:
Я хотел бы спросить, возможно ли динамически подсчитывать отдельные поля с помощью ABAP.
Ключ на наших компакт-дисках имеет 9 полей, что довольно много, но разделить его невозможно из-за исторических решений. Мне нужен код, подобный приведенному ниже:
select count(distinct (lv_requested_elements)) from CDS_VIEW;
или
select count(*) from (select distinct lv_requested_elements from CDS_VIEW);
Я знаю, что можно прочитать select в память и получить sy-dbcnt
, но я хочу быть уверен, что другого варианта нет.
Комментарии:
1. Какая версия SAP_BASIS у вас есть? Когда у вас уже есть 7,51, вы могли бы сделать это с
WITH
помощью …SELECT
.2. У нас новейшая версия, поэтому 7.51 в порядке. Не могли бы вы прислать какую-либо страницу или документацию, как предоставить такое утверждение с помощью WITH … ВЫБРАТЬ ? Я не смог предоставить это без считывания значений в память.
Ответ №1:
Я предполагаю, что самый простой и понятный способ — это считывание наименьшего поля в память, а затем подсчет по сгруппированным (выделенным) строкам:
DATA(fields) = ` BLART, BLDAT, BUDAT`.
DATA: lt_count TYPE TABLE OF string.
SELECT (fields(6))
INTO TABLE @lt_count
FROM ('BKPF')
GROUP BY (fields).
DATA(count) = sy-dbcnt.
CTE, о котором упоминалось, использует одно и то же чтение из памяти, поэтому вы не получите прироста производительности:
Общее табличное выражение создает временный табличный набор результатов, к которому можно получить доступ во время выполнения инструкции WITH
Если вы собираетесь часто считать эту комбинацию клавиш, я предлагаю создать представление потребления или вложенных CDS, которое будет делать это «на лету».