0

2 つの列 (PROJECT_ID と CATEGORY_NAME) で分割したいのですが、正しい構文を書くのに問題があります。以下のクエリは機能しますが、over 句を追加しようとすると正しく機能しません。再帰クエリを使用して、project_id で分割された行を連結し、name_last と name_first を結合および連結してリストを作成する管理者のリストを作成しました。リスト内の管理者は異なるカテゴリ (「INVISION」と「INSIGHT」) で作業しているが、同じ project_id の下にあるため、CATEGORY_NAME を含めるために追加の over 句を使用する必要があります。最初のサブクエリ

SELECT 
        RowNumber() over (PARTITION BY F13.DIM_PROJECT_ID, F13.CATEGORY_NAME ORDER BY F13.PROJECT_NAME),      
        F13.DIM_PROJECT_ID.....etc.

正しいデータを抽出しますが、その正しいデータをプロジェクトとカテゴリの両方でパーティション分割する方法がわかりません。私はdb2を使用しています。

with

   t1(rowNum, PROJECT_ID, NAME_LAST, NAME_FIRST, POINT_OF_CONTACT, PROJECT_NAME, BUSINESS_NAME) as 

   (
      SELECT 
        RowNumber() over (PARTITION BY F13.DIM_PROJECT_ID, F13.CATEGORY_NAME ORDER BY F13.PROJECT_NAME),      
        F13.DIM_PROJECT_ID,
        F2P.NAME_LAST,
        F2P.NAME_FIRST, 
        REPLACE(F2P.POINT_OF_CONTACT, ',', ' |') AS POINT_OF_CONTACT,
        F13.PROJECT_NAME,
        F2H.CATEGORY_NAME,

FROM FACT_TABLE AS F13
INNER JOIN ADMIN AS F2P ON F13.DIM_PROJECT_ID = F2P.DIM_PROJECT_ID
LEFT JOIN HOURS AS F2H ON F13.DIM_PROJECT_ID = F2H.DIM_PROJECT_ID
WHERE F2H.CATEGORY_NAME = ('INVISION')




group by  
        F13.DIM_PROJECT_ID,
        F13.PROJECT_NAME,
        F2P.NAME_LAST,
        F2P.NAME_FIRST, 
        F2P.POINT_OF_CONTACT,
        F2H.CATEGORY_NAME
 ) ,

       t2(PROJECT_ID, LIST, POINT_OF_CONTACT, PROJECT_NAME, BUSINESS_NAME, cnt) AS
    ( SELECT    PROJECT_ID, 
                VARCHAR(NAME_FIRST CONCAT ' ' CONCAT NAME_LAST, 6000),
                POINT_OF_CONTACT, 
                PROJECT_NAME, 
                CATEGORY_NAME,
                1
    FROM t1
            WHERE rowNum = 1
            UNION ALL
    SELECT      t2.PROJECT_ID,
                t2.list || ' | ' || t1.NAME_FIRST CONCAT ' ' CONCAT t1.NAME_LAST, 
                t1.POINT_OF_CONTACT,
                t1.PROJECT_NAME, 
                t1.CATEGORY_NAME
    FROM t2, t1 
            WHERE t2.project_id = t1.project_id 
            AND   t2.cnt + 1 = t1.rowNum )    
    SELECT      PROJECT_ID, 
                PROJECT_NAME, 
                POINT_OF_CONTACT,
                CATEGORY_NAME
                list
    FROM t2
            WHERE ( PROJECT_ID, cnt ) IN (
    SELECT PROJECT_ID, MAX(rowNum)
    FROM t1
            GROUP BY PROJECT_ID )    

私が得ている結果は重複を生成していますが、2 番目の列 (category_name がパーティション句に含まれている場合) のみです。現在の結果: ここに画像の説明を入力

望ましい結果:

ここに画像の説明を入力

4

1 に答える 1