我有一张名为`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
。
有任何帮助吗?提前谢谢。
答案 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)