[編。注:このSOの質問に関連しています。問題が根本的に変化し、以前の質問/回答がまだ有効であるため、質問を編集しませんでした]
ビューを作成する最善の方法についてのアドバイスを探しています。以前の問題からの現在のクエリは機能するようになりましたが、親/子アイテムのアイデアは考慮されていません。
関連するデータ構造
+---------+ +---------+
|WORKORDER| |WPLABOR |
|---------| |---------|
|WONUM |+---->|WONUM |
|PARENT | + |LABORHRS |
|ISTASK | | |RATE |
|... | | +---------+
| | |
+---------+ | +---------+
| |WPITEM |
| |---------|
+-->|WONUM |
| |ITEMQTY |
| |UNITCOST |
| +---------+
|
| +----------------+
| |LONGDESCRIPTION |
| |----------------|
+-->|LDKEY |
|LDTEXT |
+----------------+
ゴール
簡単に言えば、私は誰かに作業指示書番号を入力してもらい、作業指示書の情報に加えて、すべての子作業指示書 (タスク作業指示書とも呼ばれます) の人件費と材料費の概要を含むレポートを引き出します。
したがって、次を返すビューが必要です。
- その作業指示書に関する標準情報 (WONUM によって ID 化) -- 説明、場所など。
- 子タスク作業指示書ごとの合計労働時間 (LABORHRS の合計)
- WPLABOR からの総人件費 (LABORHRS*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;
現在のクエリの問題
子タスクの作業指示書を考慮しないため、労働やアイテムのレコードは返されず (親に直接関連付けられているものはありません)、労働とアイテムの合計は常に空です。