Получить количество различных значений ключевых полей с компакт-дисков

#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, которое будет делать это «на лету».