将不同的名称分组'合而为一

时间:2015-04-15 07:44:14

标签: sql oracle

我目前的数据对于我想要做的事情看起来很糟糕。我有多个列构成位置ID,其中一列是位置描述。我的问题是,如果该位置是“容器”,则说明列包含容器ID而不是单词' Container'

在我的例子中,如果它是一个数字,那么它就是一个容器'

Location_desc | Qty
--------------------
Location A    | 10
Location A    | 10
Location B    | 20
Location B    | 20
ABC-123456    | 5
DEF-987654    | 5

我想总结一下qty列并按位置对它们进行分组,但我希望我的结果是这样的

 Location | Total
 ----------------
 Location A | 20
 Location B | 40
 Container  | 10

2 个答案:

答案 0 :(得分:1)

使用CASE来修复位置:

select location, sum(qty) as total
from (select case when Location in ('Location A','Location B') then Location
             else 'Container' end as location,
             qty from tablename)
group by location

答案 1 :(得分:0)

使用长度和翻译的组合建议here

select location_name, sum(qty) from (
select decode(Length(TRANSLATE(Location_desc, ' +-.0123456789', ' ')),null,'Container',Location_desc) location_name, qty
from YOUR_TABLE) group by location_name
;

希望帮助你!