SQL查询根据某些分隔符将行拆分为多行

时间:2016-04-07 05:50:37

标签: postgresql

我有一张名为`test'的表。具有以下结构。

category        key                                                 value    
name           real_name:Brad,nick_name:Brady,name_type:small        NOVALUE 
other          description                                           cool

但我想基于key分隔符将,列分成多行,:分隔符后的值应该是值列的一部分,其中值等于{{1} }。因此输出应该如下:

NOVALUE

如何为此编写category key value name real_name Brad name nick_name Brady name name_type small other description cool 查询。我正在使用sql

有任何帮助吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用string_to_array而不需要这样做:

select ts.category, 
       split_part(key_value, ':', 1) as key,
       split_part(key_value, ':', 2) as value
from test ts
  cross join lateral unnest(string_to_array(ts.key, ',')) as t (key_value)
where ts.value = 'NOVALUE'

union all

select category, 
       key, 
       value
from test
where value <> 'NOVALUE';

SQLFiddle示例:http://sqlfiddle.com/#!15/6f1e6/1

答案 1 :(得分:0)

 select category, 
       split_part(key_value, ':', 1) as key,
       case  when  value = 'NOVALUE' then split_part(key_value, ':', 2) else value end 
from test
  cross join lateral unnest(string_to_array(key, ',')) as t (key_value)