0

私は各10行の値を連結する必要がある変換を形成しようとしています。ペンタホの各n行を連結する

第1ステップ:表入力(PostgresのDBから照会:select id from tablename)上記クエリから

サンプルの結果:ここでIは、単一の行にIDS各10行を連結する必要が

    id 
00000191-555c-11e4-922d-29fb57a42e4c 
00000192-555c-11e4-922d-29fb57a42e4c 
00000193-555c-11e4-922d-29fb57a42e4c 
00000194-555c-11e4-922d-29fb57a42e4c 
00000195-555c-11e4-922d-29fb57a42e4c 
00000196-555c-11e4-922d-29fb57a42e4c 
00000197-555c-11e4-922d-29fb57a42e4c 
00000198-555c-11e4-922d-29fb57a42e4c 
00000199-555c-11e4-922d-29fb57a42e4c 
0000019a-555c-11e4-922d-29fb57a42e4c 
000001a3-3cf2-11e4-b398-e52ee0ec6a4c 
000002ad-3768-4242-88cf-96f27d0263af 
000003ea-26e3-11e4-ace7-15c7d609fa6e 
00000684-73fb-4d65-a502-87c4eb6607c1 
0000087a-f587-44fa-8e88-7bcae5bcb22c 
00000889-39c5-11e4-bd0e-c3f9d65ac856 
0000094c-be98-4456-8b49-6357a36581aa 
00000987-2f19-4574-ab85-6744a65ee4e3 
00000cd0-4097-11e4-a4e6-af71a3d902c0 
00000e1e-3b55-11e4-9897-d958d55e6784 

。例えば。 1行に1〜10行ID、別の行に11〜20行IDなどがあります。

予想される出力:

ids 

00000191-555c-11e4-922d-29fb57a42e4c,00000192-555c-11e4-922d-29fb57a42e4c,00000193-555c-11e4-922d-29fb57a42e4c,00000194-555c-11e4-922d-29fb57a42e4c,00000195-555c-11e4-922d-29fb57a42e4c,00000196-555c-11e4-922d-29fb57a42e4c,00000197-555c-11e4-922d-29fb57a42e4c,00000198-555c-11e4-922d-29fb57a42e4c,00000199-555c-11e4-922d-29fb57a42e4c,0000019a-555c-11e4-922d-29fb57a42e4c 
000001a3-3cf2-11e4-b398-e52ee0ec6a4c,000002ad-3768-4242-88cf-96f27d0263af,000003ea-26e3-11e4-ace7-15c7d609fa6e,00000684-73fb-4d65-a502-87c4eb6607c1,0000087a-f587-44fa-8e88-7bcae5bcb22c,00000889-39c5-11e4-bd0e-c3f9d65ac856,0000094c-be98-4456-8b49-6357a36581aa,00000987-2f19-4574-ab85-6744a65ee4e3,00000cd0-4097-11e4-a4e6-af71a3d902c0,00000e1e-3b55-11e4-9897-d958d55e6784 

私は行をCONCATますが、そうだとすれば、このシナリオでは、私はそれを使用することができ、どのように私はそれを使用することができますによって、GROUP BYまたはメモリ・グループを知っています。

私にこれを手伝ってください。前もって感謝します!

+0

あなたの質問を編集し、サンプルデータと希望する結果を提供してください。 –

+0

@GordonLinoffはサンプルデータと予想される出力を追加しました。今は理解できると思っています。 – Arunraj

答えて

0

smthのようなものですか?

select string_agg(id, ',') 
from (select t.*, row_number() over (order by id) - 1 as seqnum 
     from t 
    ) t 
group by floor(seqnum/10); 

これはstring_agg()を使用していますが、私はおそらく結果のための配列を使用します。

t=# \x 
Expanded display is on. 
t=# with a as 
(
    select ntile(2) over (order by id),id from tablename 
) 
select 
    string_agg(id,',') 
from a 
group by ntile; 
-[ RECORD 1 ]------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
string_agg | 00000191-555c-11e4-922d-29fb57a42e4c, 00000192-555c-11e4-922d-29fb57a42e4c, 00000193-555c-11e4-922d-29fb57a42e4c, 00000194-555c-11e4-922d-29fb57a42e4c, 00000195-555c-11e4-922d-29fb57a42e4c, 00000196-555c-11e4-922d-29fb57a42e4c, 00000197-555c-11e4-922d-29fb57a42e4c, 00000198-555c-11e4-922d-29fb57a42e4c, 00000199-555c-11e4-922d-29fb57a42e4c, 0000019a-555c-11e4-922d-29fb57a42e4c 
-[ RECORD 2 ]------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
string_agg | 000001a3-3cf2-11e4-b398-e52ee0ec6a4c, 000002ad-3768-4242-88cf-96f27d0263af, 000003ea-26e3-11e4-ace7-15c7d609fa6e, 00000684-73fb-4d65-a502-87c4eb6607c1, 0000087a-f587-44fa-8e88-7bcae5bcb22c, 00000889-39c5-11e4-bd0e-c3f9d65ac856, 0000094c-be98-4456-8b49-6357a36581aa, 00000987-2f19-4574-ab85-6744a65ee4e3, 00000cd0-4097-11e4-a4e6-af71a3d902c0, 00000e1e-3b55-11e4-9897-d958d55e6784 
+0

データセットのサイズに応じてntile(2)の行数を集計しませんか? – user4637357

+0

確かに - あなたの例ではntile(20/10)を使用しました –

+0

@ VaoTsunテーブルに何百万ものレコードがある場合、上記のクエリのパフォーマンスはどうですか? – Arunraj

1

idsをグループ化する適切なフィールドがない場合は、自分で作成してください。

この場合、クエリに行番号を追加し、それらを10で割って、まともで簡単に設定可能なグループを取得します。

select row_number()/10 + 1 OVER (ORDER BY id) as rnum, id from tablename ORDER BY rnum 

これは、フィールドでは、グループとして、このフィールドを設定して、あなたにRNUM 1と10行、RNUM 2、などと10行を与えるべきとすれば完了です。

+1

また、 'Add sequence'ステップを組み合わせて、' Calculator'、UDJC、javaスクリプトステップまたはjava式のいずれかでカウンタを10で割って、PDIでグループフィールドを作成することもできます。 PDIの方法は面倒ですが、他のデータソースを使用する必要がある場合は便利です。 – user4637357

+1

ところで、適切な集計を得るために、Group Byステップの入力がグループフィールドでソートされていることを確認する必要があります。したがって、上記のクエリにORDER BY idまたはORDER BY rnumを含める方が良いでしょう。私はPostgreSQLが一般的な場合にrow_number値のソート保証を提供しているとは思わない。 – user4637357

+0

@ user4637357答えに追加しますが、順序はウィンドウ関数中に起こりますので、不要なはずです。オプティマイザは、他の操作を指定しない限り、レコードをシャッフルしません。少なくとも、私はそれが他のRDBMSで起こるのを見たことはありません。 – Cyrus

0

私は解決策があると思います。

関連する問題