Объединить две строки как новую строку и суммировать в соответствии со значением - PullRequest
1 голос
/ 10 апреля 2019

Используя приведенный ниже запрос, я получаю результаты в следующем формате.

select count(o.orderid) as ORDER,u.usergroup as user 
from order_details o,user_deatils u
where o.ORDERCREATOR=u.USERNAME
and u.usergroup IN ('A','B','C','D')
group by u.usergroup;

ЗАКАЗАТЬ ПОЛЬЗОВАТЕЛЯ 10 A 20 B 30 C 40 D

, но я пытаюсь объединить C и D с разнымизначения и суммируйте их значения соответственно

ORDER   USER
10       A
20       B
70      C+D

я пытался с помощью pivot, concat, но не смог получить результат в нужном формате.

любой отрыв был бы заметен:)

Ответы [ 3 ]

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

Использование декодирование функция:

select count(o.orderid) as ORDER,decode(u.usergroup,'C','C+D','D','C+D',u.usergroup) as user 
from order_details o,user_deatils u
where o.ORDERCREATOR=u.USERNAME
and u.usergroup IN ('A','B','C','D')
group by decode(u.usergroup,'C','C+D','D','C+D',u.usergroup);
0 голосов
/ 10 апреля 2019

С CASE и правильным соединением:

select 
  count(o.orderid) as ORDER,
  case 
    when u.usergroup in ('C', 'D') then 'C+D'
    else u.usergroup
  end usergroup
from order_details o inner join user_deatils u
on o.ORDERCREATOR = u.USERNAME
and u.usergroup IN ('A','B','C','D')
group by usergroup;
0 голосов
/ 10 апреля 2019

Вы можете агрегировать, используя выражение CASE:

select
    case when u.usergroup = 'A' then 'A'
         when u.usergroup = 'B' then 'B'
         else 'C+D' end as user,
    count(o.orderid) as "ORDER"
from order_details o
inner join user_deatils u
    on o.ORDERCREATOR = u.USERNAME
where
    u.usergroup IN ('A','B','C','D')
group by
    case when u.usergroup = 'A' then 'A'
         when u.usergroup = 'B' then 'B'
         else 'C+D' end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...