0

我很抱歉提出一个可能已经回答的问题,但我真的很难理解如何正确地从我的数据库中获取我需要的东西。我有一个 primavera P6 数据库,我试图从中获取可用的 WBS 代码。但是,因为我将其构建到报告仪表板中,所以我需要做的不仅仅是连接父/子值。我的问题将分为两部分,但在这里理解我的问题是数据库的基本模型。

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 个级别,但这会使这个示例过于复杂。我的第二个问题是(我希望)更简单,是否可以添加一个额外的结束列,将所有这些级别连接并组合成一个 WBS 代码?那看起来像:

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

我需要仪表板上的切片器控件的级别列,并且我需要 WBS 能够构建一个链接表,这将允许我将我的 P6 数据库连接到使用这些 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 回答