2017-06-16 2 views
0

I持って、私は、私はこのようなものでアンネストSQLを交換しようとしているネスト解除列

with pre as (
with a(k, v) as (select id, my_column from mytable), 
col(s, n) as (select * from unnest(array['Title', 'First', 'Middle', 'Last']) with ordinality c (s, n)) 

データベース列の値に置き換えしようとしていますいくつかのハードコードされた値を持っているいくつかのSQL:

select unnest(string_to_array(my_column, ':')) as elements from mytable 

MYCOLUMNコンテンツの長さが異なるが、例えば、タイトル= AAAであり得る:最初= BBB:中央= CCC:最後= DDD

おかげ

+0

値 "とする。質問を詳しく説明してください - –

答えて

0

私の答えはon your previous postです。ここでは、規則性の名前付き列でunnest(string_to_array(my_column, ':'))に参加することができる方法の例です。もちろん

t=# with a as (select id,k,v from my_table, unnest(string_to_array(my_column, ':')) with ordinality as t(k,v)) 
, col(s, n) as (select * from unnest(array['Title', 'First', 'Middle', 'Last']) with ordinality c (s, n)) 
select * from a join col on n=v; 
id |  k  | v | s | n 
----+------------+---+--------+--- 
    1 | title=aaa | 1 | Title | 1 
    1 | first=bbb | 2 | First | 2 
    1 | middle=ccc | 3 | Middle | 3 
    1 | last=ddd | 4 | Last | 4 
(4 rows) 

あなたは(あなたの前のポストに基づいて)違っ参加する必要があります。しかし、不明な部分が値から選択するのではなくテーブルから選択する方法だった場合は、上記の例が役立ちます。テーブルへ

更新

プット値:今

t=# create table keys(t text); 
CREATE TABLE 
Time: 91.908 ms 
t=# insert into keys select unnest(array['Title', 'First', 'Middle', 'Last']); 
INSERT 0 4 
Time: 11.552 ms 
t=# select * from keys ; 
    t 
-------- 
Title 
First 
Middle 
Last 
(4 rows) 

とは、キーテーブルに対して加入:私はハードコードされた「テーブルからではなく選択する方法の一例と答え

t=# with a as (select id,k,v from my_table, unnest(string_to_array(my_column, ':')) with ordinality as t(k,v)) 
select * from a join keys on split_part(k,'=',1) = lower(t); 
id |  k  | v | t 
----+------------+---+-------- 
    1 | first=bbb | 2 | First 
    1 | last=ddd | 4 | Last 
    1 | middle=ccc | 3 | Middle 
    1 | title=aaa | 1 | Title 
(4 rows) 
+0

の前に私がチャットしなかった場合、あなたが聞いたことは分かりません。この部分はselect *に問題があります(配列['Title'、 'First'、 'Middle'、 'Last']私はこれらが何であるかわからないので、私は列から値を取得し、ハードコードしたくないです – user8159298

+0

@ user8159298答えを –

+0

私はまだ混乱しています!my_tableからselect my_columnと言うならば、内容は最後の=のBBB:ミドル= CCC:ボトル= DDD: my_column が 最初= AAA ----------例えば、何もすることがCREATE TABLEでテーブル= DDD 、私はから値を必要としますmy_columnをネストしないようにしています:そして、=で分割し、=の前に最初の部分を使用してくださいe表の列名。だから私はこのようなことをしようとしているが、正しいSQLを知らない。 {string_to_array(string_to_array(my_column、 ':'))をmy_tableのmy_new_columnとして選択し、次にsplit_partを '='で選択する。 – user8159298

関連する問題