NAME、NAME_TYPE、SOURCEを次のように格納するテーブルTABA(PK:NAME)があります。
NAME NAME_TYPE SOURCE
---- --------- ------
Name1 Category S1
Name2 Category S2
Name3 Datamart
Name4 Category S1
Name5 Datamart
Name6 Datamart
Name7 Category S3
上記の注:NAME_TYPE = Categoryの場合のみ、ソースがデータに存在します。
この方法でname_typeに基づくNAME列間の関係を持つNAME、PARENT_NAMEを格納する別のテーブルTABA_PARENTがあります。データマートとカテゴリの関係は1対多です。
NAME PARENT_NAME
----- -----------
Name3 Name1
Name3 Name2
Name3 Name4
Name3 Name5
Name5 Name1
Name5 Name6
Name6 Name7
私の要件は、NAME_TYPE = DatamartであるTABAのSOURCEを取得することです(現在、TABAにはありません)
期待される出力:
SOURCE column for Name3
-----------------------
S1,S2,S3
秘訣は、Name3がTABA_PARENTのカテゴリにマップされるまで、Name3のSOURCEを再帰的に推測することです。
上記の例では:
Name3は、PARENT_NAME Name1、Name2、Name4、Name5にマップされます。これらのうち3つ(name1、Name2、Name4)はname_type =カテゴリであるため、TABAで個別のソースを使用できます--S1、S24番目のPARENT_NAMEName5はname_typeデータマート(ソース情報は使用できません)であり、 name_type=Categoryに到達します。
Name5がPARENT_NAMEName1、Name6にマップされているという情報があります。Name1はカテゴリであるため、ソースを推測できます。Name6もデータマートです。
ただし、Name6は最終的にカテゴリであるName7にマップされるため、ソースが利用可能です-S3
上に示したように、すべてのマッピングは、個別のソースを識別するためにname_typeCategoryに到達するまで再帰的に解決する必要があります。
Expected Result: S1,S2,S3
これがlistaggまたは同様のものを使用して実行できるかどうかを試しています(小さなpl / sqlコードでも問題ありませんが、可能であれば単一の選択をお勧めします)これを再帰的に実行するのは困難です。どんな助けでも大歓迎です。