查询以合并(某些)行

时间:2015-05-22 20:55:42

标签: sql oracle merge group-by sum

我目前正在尝试创建一个将某些行合并为一个类别并总结相关值的查询。

我将尝试用以下示例来说明它:

Country | Sales Jan | Sales Feb | Sales Mar
--------+-----------+-----------+----------
Austria |    100    |    110    |    120
Spain   |    120    |    130    |    140
Italy   |     70    |     50    |     70
Japan   |     10    |     10    |     10
Brazil  |     20    |     20    |     20
Mexico  |      5    |      5    |      5

查询应显示每个欧洲国家/地区的数据,并将所有其他行合并到类别"其他"并总结相关的价值观。

结果应如下所示:

Country | Sales Jan | Sales Feb | Sales Mar
--------+-----------+-----------+----------
Austria |    100    |    110    |    120
Spain   |    120    |    130    |    140
Italy   |     70    |     50    |     70
Other   |     35    |     35    |     35

更新:应详细显示的国家/地区在字符串列表中指定(在这种情况下,列表将包含"奥地利","西班牙",&#34 ;意大利&#34)。因此,未包含在此列表中的每个国家/地区都应合并到类别"其他"通过查询。

1 个答案:

答案 0 :(得分:3)

试试这个:

select case when country in('Austria','Spain','Italy')
            then Country else 'Other' end as Country,
       sum(Jan) as Jan,
       sum(Feb) as Feb,
       sum(Mar) as Mar

from t
group by case when country in('Austria','Spain','Italy')
              then Country else 'Other' end

小提琴http://sqlfiddle.com/#!4/93719/2