0

サンプルテーブル

番号 DEAL_NUMBER 名前1 NAME2
1 T01 トム ジェリー
2 T02 レブロン スティーブン

以下のように出力したい:

番号 DEAL_NUMBER 名前1 NAME2 名前_COM
1 T01 トム ジェリー レブロン トム スティーブン ジェリー
2 T02 レブロン スティーブン レブロン トム スティーブン ジェリー

string_agg 関数を使えば解決できますが、あまり便利ではありません。

CREATE TEMP FUNCTION EXCHANGE_PLACE(STR STRING)
RETURNS STRING
AS

((
          SELECT ARRAY_TO_STRING(array_reverse(ARRAY_LIST),' ') FROM (SELECT SPLIT(STR,' ')ARRAY_LIST)
));

WITH TBL_D_CUSTOMER AS
(
 SELECT "1" AS NUMBER,"T01" AS DEAL_NUMBER,"TOM" AS NAME1, "JERRY" AS NAME2 UNION ALL 
 SELECT "2","T01","LEBRON","STEVEN"
)


SELECT 
       *,
EXCHANGE_PLACE(STRING_AGG(NAME1,' ')OVER(PARTITION BY DEAL_NUMBER)) || ' ' || EXCHANGE_PLACE(STRING_AGG(NAME2,' ')OVER(PARTITION BY DEAL_NUMBER)) AS NAME_COM
FROM TBL_D_CUSTOMER

それをより良くすることができるアプローチはありますか?

4

1 に答える 1