例如:產品A共有三個製程,其標準工時依序為20、30、50, 則其總工時為100 (20+30+50), 各階累計標工時為: 第一製程20, 第二製程50 (20+30), 第三製程為 100 (20+30+50), 如下表:
雖然Oracle和MS-SQL或許各自有提供函數來節省SQL語句,但為求跨平台,我必需用標準的SQL語法來完成,經過一番思考,完成了這組SQL, 經過驗證,可以在這兩套資料庫(Oracle、MS-SQL)使用,我相信其它的資料庫也可以使用。
我在這兩套資料庫中各自建立了一個資料表(TABLE), 姑且命名為pt, 這個資料表只有三個欄位(column, field):pno (產品)、seq(製程)、time(標準工時)
SQL如下:
SELECT H.pno 產品,H.seq 製程序
,SUM(CASE WHEN D.pno=H.pno AND D.seq =H.seq THEN D.time ELSE 0 END) 本階工時
,SUM(CASE WHEN D.pno=H.pno AND D.seq<=H.seq THEN D.time ELSE 0 END) 累計工時
,SUM(CASE WHEN D.pno=H.pno THEN D.time ELSE 0 END) 總工時
,(SUM(CASE WHEN D.pno=H.pno AND D.seq<=H.seq THEN D.time ELSE 0 END) / SUM(CASE WHEN D.pno=H.pno THEN D.time ELSE 0 END)) 完工率
FROM pt H, pt D
WHERE H.pno=D.pno
GROUP BY H.pno, H.seq
ORDER BY H.pno, H.seq
所查詢出來的結果: