如何从行中拆分逗号分隔值并转换为列?

时间:2016-02-15 10:54:45

标签: sql oracle oracle11g

我有一个LIST_OF_PRODUCTS表,其中包含:

Product ID  Product Name  Product Region
1           LG TV         North;South;North East
2           Sony Bravia   East;West
3           Samsung TV    East;North East;South West

我想从表中拆分分隔的产品区域值并将它们设为单独的列,并根据其区域显示产品的可用性,因此我最终得到:

Product ID  Product Name  North  South  East  West  NorthEast  SouthWest
1           LG TV             1      1     0     0          1          0
2           Sony Bravia       0      0     1     1          0          0
3           Samsung TV        0      0     1     0          1          1

我怎么能这样拆分出来?

1 个答案:

答案 0 :(得分:1)

使用一系列案例,当陈述可以让你接近你想要的时候。

这看起来像这样:

select product_id, product_name, 
case when instr(product_region,'North')>0 then 1 else 0 end as North,
case when instr(product_region,'East')>0 then 1 else 0 end as East,
case when instr(product_region,'South')>0 then 1 else 0 end as South,
case when instr(product_region,'West')>0 then 1 else 0 end as West,
from list_of_products;

哪里变得棘手的是你的区域枚举{北,东,南,西,东北,西北,东南,西南}没有正确回应简单的instr搜索 - 因为'北'匹配'北','东北'和'西北' - 因此您必须将您的区域枚举更改为不适合的方案。例如{North_,East_,South_,West_,NorthEast_,NorthWest_,SouthEast_,SouthWest_}它只需要是临时的,所以也许你可以通过某种子查询传递region字段。