次のような列を持つテーブルがあります:
USERID、USERTYPE、DIVISION、SUBDIVISION
各ユーザー ID には、1 つ以上のユーザータイプがあります (たとえば、ユーザーは開発者または管理者、またはその両方になることができます)。ユーザータイプに応じて、ユーザーは部門とオプションでそのサブ部門に登録できます。
USERID、USERTYPE、および DIVISION は NULL 列ではありません。
出力は次の形式で必要です -
- USERID、USERTYPE、DIVISION1、DIVISION2、DIVISION3 などです。
したがって、USERID-USERTYPE の組み合わせに対して一意のレコードが必要です。このために、正常に動作する PIVOT 演算子を使用しました。このクエリの結果を格納する一時テーブル (Table1 としましょう) も作成しました。 - 現在、ユーザーがサブディビジョンを購読している場合、サブディビジョンの値はそのディビジョンの下にコンマ区切りの値として書き込まれる必要があります。サブディビジョンに登録されていない場合、それぞれの列の下に単純なディビジョンが表示されます。
LISTAGG 関数を使用して、USERID と USERTYPE の組み合わせごとにコンマ区切りのサブディビジョンを提供するクエリを作成しました。このクエリの結果は Table2 に格納されます。
ここで、テーブル Table1 と Table2 を USERID と USERTYPE で結合すると、単一の USERID と USERTYPE の組み合わせに対して複数の行が取得されます。これは明らかですが、必要なものではありません。
サンプルデータは次のとおりです。
USERID = 3 のレコードに注意してください。
取得しているのは「結合クエリの結果」であり、必要なものは「最終結果」です。
また、ピボット クエリの前に LISTAGG を使用することはできません。後でピボット クエリを作成するときに、サブディビジョンの可能な組み合わせをすべてリストするのは面倒だからです。
ここでいくつかの小さな点が欠けていると確信していますが、何がわからないのですか。
提案や指針は非常に役立ちます。
前もって感謝します。