【问题标题】:Query to merge (some) rows查询合并(一些)行
【发布时间】:2015-05-22 20:55:42
【问题描述】:

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

我将尝试用下面的例子来说明它:

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

更新:应在字符串列表中指定应详细显示的国家/地区(在本例中,该列表将包含“Austria”、“Spain”、“Italy”)。因此,未包含在此列表中的每个国家/地区都应通过查询合并到“其他”类别中。

【问题讨论】:

  • 如何通过列表查询?作为字符串?来自另一张桌子?
  • 我想将它作为字符串列表传递给查询

标签: sql oracle merge group-by sum


【解决方案1】:

试试这个:

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

【讨论】:

  • 正是我想要的 - Giorgi,非常感谢您的帮助!
猜你喜欢
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-15
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多