#oracle #oracle11g
#Oracle #oracle11g
Вопрос:
Используя приведенный ниже запрос, я получаю результаты в формате ниже.
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, но не смог получить результат в желаемом формате.
любое преимущество было бы заметным 🙂
Ответ №1:
Вы можете агрегировать, используя 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;
Ответ №2:
Используйте функцию декодирования:
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);
Комментарии:
1. большое спасибо, это сработало. еще один небольшой запрос, если я хочу добавить псевдоним, например, A как Север, B как Юг, должен ли я упомянуть об этом в разделе decode.
2. @S.Das да, как в select, так и в group by
decode(u.usergroup,'A','North','B','South',...
Ответ №3:
С РЕГИСТРОМ и правильным соединением:
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;