SQL-запрос SAP HANA для поиска всех возможных комбинаций между двумя столбцами

#sql #database #hana

#sql #База данных #hana

Вопрос:

Цель состоит в том, чтобы создать все возможные комбинации соединения двух столбцов с помощью SAP HANA SQL. каждая статья первого столбца (‘100′,’101′,’102′,’103’) должно быть в результате комбинации.

Пример кода

 create table basis
(article Integer,
supplier VarChar(10) );
Insert into basis Values (100, 'A');
Insert into basis Values (101, 'A');
Insert into basis Values (101, 'B');
Insert into basis Values (101, 'C');
Insert into basis Values (102, 'D');
Insert into basis Values (103, 'B');
 

Набор результатов

 combination_nr;article;supplier
1;100;'A'
1;101;'A'
1;102;'D'
1;103;'B'
2;100;'A'
2;101;'B'
2;102;'D'
2;103;'B'
3;100;'A'
3;101;'C'
3;102;'D'
3;103;'B'
 

Предположим, если мы добавим еще одну строку против 102 как «A», то наш результирующий набор будет выглядеть следующим образом

Также, согласно приведенным ниже расчетам, теперь у нас есть 24 результирующих набора

 1;100;'A'
1;101;'A'
1;102;'A'
1;103;'B'

2;100;'A'
2;101;'A'
2;102;'D'
2;103;'B'

3;100;'A'
3;101;'B'
3;102;'A'
3;103;'B'

4;100;'A'
4;101;'B'
4;102;'D'
4;103;'B'

5;100;'A'
5;101;'C'
5;102;'A'
5;103;'B'

6;100;'A'
6;101;'C'
6;102;'D'
6;103;'B'
 

Вычисления:

 article 100: 1 supplier ('A')
article 101: 3 suppliers ('A','B','C')
article 102: 1 supplier ('D')
article 103: 1 supplier ('B')
unique articles: 4 (100,101,102,103)
1x3x1x1 x 4 = 12 (combination rows)
 

Комментарии:

1. Каков окончательный случай, для которого вам нужно умножить данные? Это для отображения или для некоторой фильтрации? HANA не любит умножать данные во время выполнения, также он может использовать всю память для нескольких комбинаций с большими группами article_id . Так что, возможно, есть другое менее ресурсоемкое решение

Ответ №1:

Как насчет:

 select article, 
       count(supplier) as nb_supplier,
       STRING_AGG(supplier,',') as list_suppliers
from (select distinct article, supplier from basis)
group by article