查询帮助:父/子项目总计
[埃德。注意:与这个SO问题相关;没有编辑问题,因为问题已经从根本上发生了变化,之前的问题/答案仍然有效]
寻求有关如何最好地创建视图的建议。我之前的问题中的当前查询现在可以工作,但没有考虑父/子项目的想法。
相关数据结构
+---------+ +---------+
|WORKORDER| |WPLABOR |
|---------| |---------|
|WONUM |+---->|WONUM |
|PARENT | + |LABORHRS |
|ISTASK | | |RATE |
|... | | +---------+
| | |
+---------+ | +---------+
| |WPITEM |
| |---------|
+-->|WONUM |
| |ITEMQTY |
| |UNITCOST |
| +---------+
|
| +----------------+
| |LONGDESCRIPTION |
| |----------------|
+-->|LDKEY |
|LDTEXT |
+----------------+
目标
通俗地说,我让某人输入工作订单编号,并提取包含工作订单信息的报告,以及所有子工作订单(也称为任务工作订单)的劳动力和材料成本摘要
因此,我需要一个返回的视图:
- 有关该工作订单的标准信息(由 WONUM 标识)——描述、位置等
- 每个子任务工作订单的总工时(劳动力总和)
- 总劳动力来自 WPLABOR 的成本(LABORRHRS*RATE 之和) 对于其每个子任务工作订单
- 来自 WPITEM 的总项目成本(ITEMQTY*UNITCOST 之和) 对于其每个子任务工作订单
子任务工作订单 是一个工作订单其中父级 = 第一个工作订单的 WONUM 且 ISTASK=1
使用:
我希望能够通过以下方式调用它:
SELECT * from [ViewName] where wonum = '123abc';
我知道这涉及子查询和联接的组合,我只是不确定构建关系等的最佳方式是什么。
当前查询
SELECT WORKORDER.WONUM ,
WORKORDER.ACTLABHRS ,
WORKORDER.LOCATION ,
WORKORDER.STATUS ,
WORKORDER.WO7 , -- Requester
WORKORDER.WO8 , -- Extension
WORKORDER.WO9 , -- Location
WORKORDER.LEADCRAFT ,
WORKORDER.WO11 , -- Extension
WORKORDER.GLACCOUNT ,
WORKORDER.WO10 , -- Contact
WORKORDER.DESCRIPTION, -- Short description
WORKORDER.WO6 , -- Plant rearrangement (YORN / boolean value)
WORKORDER.ISTASK ,
WORKORDER.PARENT ,
LABOR.TOTALLABORHRS ,
LABOR.LABORCOST ,
ITEM.ITEMCOST ,
DESCRIPTION.LDTEXT
FROM MAXIMO.WORKORDER
LEFT JOIN
( SELECT WPLABOR.WONUM ,
SUM(WPLABOR.LABORHRS * WPLABOR.RATE) AS LABORCOST ,
SUM(WPLABOR.LABORHRS) AS TOTALLABORHRS
FROM MAXIMO.WPLABOR
GROUP BY WONUM
)
LABOR
ON WORKORDER.WONUM = LABOR.WONUM
LEFT JOIN
( SELECT WPITEM.WONUM ,
SUM(WPITEM.ITEMQTY * WPITEM.UNITCOST) AS ITEMCOST
FROM MAXIMO.WPITEM
GROUP BY WONUM
)
ITEM
ON WORKORDER.WONUM = ITEM.WONUM
LEFT JOIN
( SELECT LONGDESCRIPTION.LDKEY,
LONGDESCRIPTION.LDTEXT
FROM MAXIMO.LONGDESCRIPTION
WHERE LONGDESCRIPTION.LDOWNERTABLE='WORKORDER'
AND LONGDESCRIPTION.LDOWNERCOL = 'DESCRIPTION'
)
DESCRIPTION
ON WORKORDER.WONUM = CAST(DESCRIPTION.LDKEY AS VARCHAR(22)) HERE WORKORDER.ISTASK = 1;
的当前查询问题
因为它不考虑子任务工单,所以它不返回任何人工或物料记录(没有任何记录与父级直接关联),因此人工和物料总计始终为空。
[Ed. Note: Related to this SO question; didn't edit question because the problem has fundamentally shifted and question/answers from before are still valid]
Looking for advice of how best to create a view. The current query from my previous problem now works, but doesn't account for the idea of parent/child items.
Relevant Data structure
+---------+ +---------+
|WORKORDER| |WPLABOR |
|---------| |---------|
|WONUM |+---->|WONUM |
|PARENT | + |LABORHRS |
|ISTASK | | |RATE |
|... | | +---------+
| | |
+---------+ | +---------+
| |WPITEM |
| |---------|
+-->|WONUM |
| |ITEMQTY |
| |UNITCOST |
| +---------+
|
| +----------------+
| |LONGDESCRIPTION |
| |----------------|
+-->|LDKEY |
|LDTEXT |
+----------------+
Goal
In layman's terms, I am having someone enter a work order number, and pulling a report that has the work order's information, plus a summary of labor and materials cost for all of the child workorders (also called task workorders)
Therefore, I need a view that returns:
- The standard information about that workorder (ID'd by WONUM) -- description, location, etc.
- Total Labor Hours (SUM of LABORHRS) for each of its child task workorders
- Total Labor cost (sum of LABORHRS*RATE) from WPLABOR For each of its child task workorders
- Total Item Cost (SUM of ITEMQTY*UNITCOST) from WPITEM For each of its child task workorders
A Child Task Workorder is a workorder where parent = WONUM of first workorder and ISTASK=1
Use:
I would like to be able to call this in the following way:
SELECT * from [ViewName] where wonum = '123abc';
I know this involves a combination of subqueries and joins, I'm just not sure what the best way to structure the relationships, etc. is.
Current Query
SELECT WORKORDER.WONUM ,
WORKORDER.ACTLABHRS ,
WORKORDER.LOCATION ,
WORKORDER.STATUS ,
WORKORDER.WO7 , -- Requester
WORKORDER.WO8 , -- Extension
WORKORDER.WO9 , -- Location
WORKORDER.LEADCRAFT ,
WORKORDER.WO11 , -- Extension
WORKORDER.GLACCOUNT ,
WORKORDER.WO10 , -- Contact
WORKORDER.DESCRIPTION, -- Short description
WORKORDER.WO6 , -- Plant rearrangement (YORN / boolean value)
WORKORDER.ISTASK ,
WORKORDER.PARENT ,
LABOR.TOTALLABORHRS ,
LABOR.LABORCOST ,
ITEM.ITEMCOST ,
DESCRIPTION.LDTEXT
FROM MAXIMO.WORKORDER
LEFT JOIN
( SELECT WPLABOR.WONUM ,
SUM(WPLABOR.LABORHRS * WPLABOR.RATE) AS LABORCOST ,
SUM(WPLABOR.LABORHRS) AS TOTALLABORHRS
FROM MAXIMO.WPLABOR
GROUP BY WONUM
)
LABOR
ON WORKORDER.WONUM = LABOR.WONUM
LEFT JOIN
( SELECT WPITEM.WONUM ,
SUM(WPITEM.ITEMQTY * WPITEM.UNITCOST) AS ITEMCOST
FROM MAXIMO.WPITEM
GROUP BY WONUM
)
ITEM
ON WORKORDER.WONUM = ITEM.WONUM
LEFT JOIN
( SELECT LONGDESCRIPTION.LDKEY,
LONGDESCRIPTION.LDTEXT
FROM MAXIMO.LONGDESCRIPTION
WHERE LONGDESCRIPTION.LDOWNERTABLE='WORKORDER'
AND LONGDESCRIPTION.LDOWNERCOL = 'DESCRIPTION'
)
DESCRIPTION
ON WORKORDER.WONUM = CAST(DESCRIPTION.LDKEY AS VARCHAR(22)) HERE WORKORDER.ISTASK = 1;
Issues with Current Query
Because it doesn't take child task workorders into account, it doesn't return any labor or item records (none are directly associated with the parrent), and so the labor and item totals are always empty.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我提出了一个查询来解决这种情况,并且比“通过先前的连接”方法快一点(3 秒相比于约 90 秒)。
为了使它更容易一些,我将标准工单信息分离到一个单独的视图中(无论如何我想重新使用它)。
我最终得到的查询(如下)似乎可以解决问题:
我按以下方式使用它:
I've come up with a query that resolves the situation and is a little faster than "connect by prior "method (3 seconds compared to ~90 seconds).
To make it a little easier, I separated the standard Work Order information into a separate view (I'd like to re-use it anyway).
The query I ended up with (below) seems to do the trick:
I use it in the following way: