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