Как сгруппировать таблицу SQL ORACLE таблица с конкретными строками также присутствует - PullRequest
0 голосов
/ 08 июня 2018

У меня есть такая таблица:

Area | Client | Month
a    | A      | 1
a    | B      | 1
b    | C      | 1
a    | A      | 2
b    | B      | 2

Как можно сгруппировать и свернуть эту таблицу, чтобы получить результаты, как показано ниже:

Area | Client | Month | Count
a    | A      | 1     | 1
a    | B      | 1     | 1
a    |        | 1     | 2
b    | C      | 1     | 1
b    |        | 1     | 1
     |        | 1     | 3
a    | A      | 2     | 1
a    | B      | 2     | 1
a    |        | 2     | 2
     |        | 2     | 2
     |        |       | 5

Я хотел бы подсчитать клиентов по областями месяцы, но также перечислить столбец клиента.Я испытываю затруднения с использованием "group by" при наличии столбца клиента.Я также хотел бы "упорядочить по" месяцу, но с правильно упорядоченными резюме.

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Я предпочитаю от grouping sets до cube или rollup, потому что он более гибкий.

Однако ключом к их использованию является необходимость агрегации.Итак, я думаю, вы хотите четвертый столбец:

select area, client, month, count(*) as cnt
from t
group by grouping sets ( (area, client, month), (area, month), (month));
0 голосов
/ 08 июня 2018

Oracle уже имеет функции свертки и группировки кубов для запросов такого типа. Используйте:

select area, client , month, sum(month) count
  from mytable
 group by rollup(area, client,month) 
 order by area, client;

или это приведет к промежуточным итогам промежуточных итогов:

select area, client , month, sum(month) count
  from mytable
 group by cube(area, client,month) 
 order by area, client, month;
...