Мне нужно сгруппировать по одному столбцу и показать больше столбцов из одного набора данных - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть следующая таблица:

AMNT1   |  COLUMN1  |  COLUMN2  |  COLUMN3    | GROUP1
--------|-----------|-----------|-------------|--------
1.00    | COL1_ROW1 | COL2_ROW1 |   COL3_ROW1 | AAA
9.00    | COL1_ROW2 | COL2_ROW2 |   COL2_ROW2 | AAA
2.00    | COL1_ROW3 | COL2_ROW3 |   COL3_ROW3 | BBB
3.00    | COL1_ROW4 | COL2_ROW4 |   COL3_ROW4 | CCC

Я хочу суммировать AMNT1, сгруппированный по GROUP1:

SELECT GROUP1, SUM(AMNT1) FROM ND_TEST GROUP BY GROUP1;

GROUP1 | SUM(AMNT1)
-------|-----------
AAA    | 10.00
BBB    | 2.00
CCC    | 3.00

Дополнительно я хочу выбрать COLUMN1, COLUMN2 и COLUMN3 из ОДНОЙ строки. Поэтому мой вывод должен быть таким:

GROUP1 | SUM(AMNT1)|  COLUMN1  |  COLUMN2  |   COLUMN3  |
-------|-----------|-----------|-----------|------------|
AAA    | 10.00     | COL1_ROW1 | COL2_ROW1 |  COL3_ROW1 |
BBB    | 2.00      | COL1_ROW3 | COL2_ROW3 |  COL3_ROW3 |   
CCC    | 3.00      | COL1_ROW4 | COL2_ROW4 |  COL3_ROW4 |

Если я использую сумму по разделу, я получаю дубликаты на группу ... Если я использую агрегатные функции, я не получаю результат из той же строки ... У вас есть идея?

Спасибо!

Ответы [ 2 ]

1 голос
/ 24 апреля 2019
select group1, sum_amnt1, column1, column2, column3
from   (
         select group1, sum(amnt1) over (partition by group1) as sum_amnt1, 
                column1, column2, column3,
                row_number() over (partition by group1 order by null) as rn
         from   your_table
       )
where  rn = 1

order by null в функции row_number() соответствует вашему разъяснению (в комментарии), что любая строка из каждой группы будет в порядке (вам все равно, какая из них).

0 голосов
/ 24 апреля 2019

Вы можете использовать оконную функцию:

select nt.*
from (select nt.*, sum(AMNT1) over (partition by GROUP1) as sum,
             row_number() over (partition by GROUP1 order by AMNT1) as seq
      from ND_TEST as nt
     ) nt
where seq = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...