我很抱歉提出一个可能已经回答的问题,但我真的很难理解如何正确地从我的数据库中获得我需要的东西。我有一个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代码的其他数据源中。感谢您给予的任何和所有帮助。
答案 0 :(得分: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)