[ Ed. Примечание: относится к этому вопросу SO ; не редактировал вопрос, потому что проблема в корне изменилась, а вопрос / ответы по-прежнему актуальны ]
Нужен совет, как лучше всего создать вид. Текущий запрос из моей предыдущей задачи теперь работает, но не учитывает идею родительских / дочерних элементов.
Соответствующая структура данных
+---------+ +---------+
|WORKORDER| |WPLABOR |
|---------| |---------|
|WONUM |+---->|WONUM |
|PARENT | + |LABORHRS |
|ISTASK | | |RATE |
|... | | +---------+
| | |
+---------+ | +---------+
| |WPITEM |
| |---------|
+-->|WONUM |
| |ITEMQTY |
| |UNITCOST |
| +---------+
|
| +----------------+
| |LONGDESCRIPTION |
| |----------------|
+-->|LDKEY |
|LDTEXT |
+----------------+
Цель
С точки зрения непрофессионала, мне нужно, чтобы кто-то ввел номер рабочего задания и вытащил отчет, содержащий информацию о рабочем заказе, а также сводную информацию о трудозатратах и расходах на материалы для всех детских рабочих заказов (также называемых рабочими заданиями)
Поэтому мне нужно представление, которое возвращает:
- Стандартная информация об этом заказе (ID'd от WONUM) - описание, местоположение и т. Д.
- Общее количество рабочих часов (SUM of LABORHRS) для каждого из дочерних рабочих заданий
- Общая стоимость рабочей силы (сумма LABORHRS * RATE) от WPLABOR Для каждого из его дочерних рабочих заказов
- Общая стоимость товара (СУММА ПУНКТА * UNITCOST) от WPITEM Для каждого из его дочерних рабочих заказов
A Child Workororder - это рабочий порядок, где parent = 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;
Проблемы с текущим запросом
Поскольку он не учитывает дочерние рабочие задания, он не возвращает никаких записей о работах или элементах (ни одна из них не связана напрямую с родителем), поэтому итоги работ и элементов всегда пусты.