我在ORACLE中有这样的表。
COUNTRY | AMOUNT | MONTH
USA | 100 | 1
USA | 100 | 1
USA | 100 | 2
FRA | 100 | 1
ITA | 100 | 1
ITA | 100 | 2
FRA | 100 | 2
我需要得到一个像这样的表格。按月对行进行分组并组合某些国家/地区(在此示例中,如果国家/地区为FRA或ITA,则将更改为EUR)。
COUNTRY | AMOUNT | MONTH
USA | 200 | 1
EUR | 200 | 1
USA | 100 | 2
EUR | 200 | 2
这是正确的方法吗?
答案 0 :(得分:1)
您希望聚合数据,但使用case
表达式:
select (case when country in ('ITA', 'FRA') then 'EUR' else country end) as country,
sum(amount), month
from t
group by (case when country in ('ITA', 'FRA') then 'EUR' else country end), month;
Here是一个SQL小提琴。
答案 1 :(得分:1)
要完成答案,有一个艰难的方法。
创建一个参考表,将每个国家/地区映射到一个地区
COUNTRY | REGION
USA | USA
FRA | EUR
ITA | EUR
现在使用此查询获取结果
select r.region, sum(amount), month
from country c inner join region r
on c.country = r.country
group by r.region, c.month
order by r.region, c.month;
现在,每次新国家/地区推出时,您都不需要重写查询。只需将其添加到区域表
中