2019/05/22

SQL的累加範例

我想要用SQL來計算每一個產品各階製程的完工率,假設是以各製程的標準工時為依據,因此我需要統計每個製程的累計時數與每個產品的總工時。

例如:產品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

所查詢出來的結果:


沒有留言:

精選

小百岳35天完登計劃

台灣小百岳大多屬於容易親近的郊山,可一日往返,適合親子同遊,以下就個人完登的經驗整理一份35天完百規劃(來回步行大約400公里、費時200小時),提供給有意完百的山友參考,這是我們這對菜鳥肉腳夫妻的實測記錄,大多數人可以在更快的時間內完成。山林的奧勝美妙值得我們慢步欣賞、駐足享...