0

おそらくすでに回答されている質問をして申し訳ありませんが、データベースから必要なものを正しく取得する方法を理解するのに本当に苦労しています。使用可能な WBS コードを取得しようとしている primavera P6 データベースがあります。ただし、これをレポート ダッシュボードに組み込むため、親子の値を連結する以上のことを行う必要があります。私の質問は 2 つの部分に分けられますが、ここで私の質問を理解するために、データベースの基本モデルを説明します。

wbs_id    wbs_short_name    parent_wbs_id
1         CONTR             null
2         RET               null
3         PRC               1
4         FEE               1
5         PRC               2
6         FEE               2
7         100               3
8         110               4
9         200               5
10        210               6

私の最初の質問は、wbs_short_name のそれぞれ異なる「レベル」を別々のレベルの列に与えるクエリをどのように書くことができるかということです。最終結果は次のようになります。

Level_1    Level_2     Level_3    Level_4
CONTR      PRC         100        null
CONTR      FEE         110        null
RET        PRC         200        null
RET        FEE         210        null

level_4 を追加したのは、実際のデータベースではレベルが約 7 レベルまで拡張されているためですが、この例は複雑になりすぎます。私の 2 番目の質問は (私が予想する) はるかに単純です。これらのレベルをすべて連結して 1 つの WBS コードに結合する追加の終了列を追加することは可能ですか? それは次のようになります。

Level_1    Level_2     Level_3    WBS
CONTR      PRC         100        CONTRPRC100
CONTR      FEE         110        CONTRPRC110
RET        PRC         200        RETPRC200
RET        FEE         210        RETPRC210

ダッシュボードにスライサー コントロール用のレベル列が必要です。また、P6 データベースをこれらの WBS コードを使用する他のデータ ソースに結合できるリンク テーブルを構築できる WBS が必要です。与えられたすべての助けに感謝します。

4

1 に答える 1

0

私は最終的にそれを理解しました、これが私がそれをした方法です:

SELECT l1.wbs_short_name l1_wbs_short_name,
    l2.wbs_short_name l2_wbs_short_name,
    l3.wbs_short_name l3_wbs_short_name,
    l4.wbs_short_name l4_wbs_short_name,
    l5.wbs_short_name l5_wbs_short_name,
    l6.wbs_short_name l6_wbs_short_name,
    CONCAT(l1.wbs_short_name, l2.wbs_short_name, l3.wbs_short_name) as WBS,
    l3.wbs_id
FROM PROJWBS l1 
    LEFT JOIN PROJWBS l2 ON l2.parent_wbs_id = l1.wbs_id
    LEFT JOIN PROJWBS l3 ON l3.parent_wbs_id = l2.wbs_id
    LEFT JOIN PROJWBS l4 ON l4.parent_wbs_id = l3.wbs_id
    LEFT JOIN PROJWBS l5 ON l5.parent_wbs_id = l4.wbs_id
    LEFT JOIN PROJWBS l6 ON l6.parent_wbs_id = l5.wbs_id
WHERE l1.parent_wbs_id = 1
    AND l3.wbs_id IS NOT NULL
ORDER BY CONCAT(l1.wbs_short_name, l2.wbs_short_name, l3.wbs_short_name)
于 2016-04-26T09:10:04.340 に答える