我在SQLite数据库中有三个表;第一个表(PROJWBS
)描述了项目工程和子工程,如下所示:
| 项目ID|WBS_标识|父代_WWBS_ID|WBS_名称|
| - ------|- ------|- ------|- ------|
| 1个|1个|无|主要工程|
| 1个|十个|1个|工作-01|
| 1个|十一|1个|工作-02|
第二个表(TASK
)描述了工作任务:
| 任务编号|项目ID|WBS_标识|任务名称|
| - ------|- ------|- ------|- ------|
| 1个|1个|十个|平铺|
| 第二章|1个|十个|金属制品|
| 三个|1个|十一|木工厂|
第三个表(TASKRSRC
)描述了任务的目标成本:
| 任务编号|项目ID|目标_成本|
| - ------|- ------|- ------|
| 1个|1个|五百|
| 1个|1个|七百五十|
| 第二章|1个|三百五十|
| 三个|1个|一百五十|
我创建此查询是为了按工程和子工程安排对第一个表进行排序,并计算工程和子工程成本:
SELECT
PROJWBS.Wbs_id, PROJWBS.Parent_Wbs_id, PROJWBS.Wbs_name,
COALESCE(subquery.Total_Cost, 0) AS Total_Cost
FROM
PROJWBS
LEFT JOIN
(SELECT
TASK.Wbs_id, SUM(TASKRSRC.Target_Cost) AS Total_Cost
FROM
TASK
JOIN
TASKRSRC ON TASK.Task_id = TASKRSRC.Task_id
GROUP BY
TASK.Wbs_id) AS subquery ON PROJWBS.Wbs_id = subquery.Wbs_id
WHERE
PROJ_ID = 1
GROUP BY
PROJWBS.Wbs_id, PROJWBS.Parent_Wbs_id, PROJWBS.Wbs_name
ORDER BY
CASE
WHEN PROJWBS.Wbs_id = PROJWBS.PARENT_WBS_ID THEN PROJWBS.PARENT_WBS_ID
WHEN PROJWBS.Wbs_id < PROJWBS.PARENT_WBS_ID THEN PROJWBS.WBS_ID
WHEN PROJWBS.Wbs_id > PROJWBS.PARENT_WBS_ID THEN PROJWBS.PARENT_WBS_ID
END;
结果表仅显示0个值 主要工程的费用,只计算子工程的费用。
注:主任务与任务表无关,子任务与任务表有关。
查询应返回如下结果(考虑查询中的顺序条件):
| WBS_标识|WBS_名称|合计_成本|
| - ------|- ------|- ------|
| 1个|主要工程|小行星1750|
| 十个|工作-01|小行星1600|
| 十一|工作-02|一百五十|
如有解决方案,将不胜感激。
1条答案
按热度按时间hfwmuf9z1#
考虑第二个聚集子查询,以便在项目级别对总成本求和: