Machine1 | Machine2 | Machine3 | Shift |
abc | pqr | xyz |First |
Machine |SetupTime |OpnTime |
abc | 80 | 30 |
pqr | 60 | 40 |
xyz | 40 | 50 |
Shift | Time |
First | 440 |
我希望所有机器的OpnTime总计除以换档时间 添加setupTime为
((OpnTime+Opntime+OpnTime)/Time-(SetupTime+SetupTime+SetupTime))*100
((30+40+50)/440-(80+60+40))*100
(120/440-180)*100
(120/260)*100
(0.46)*100
46%
你能帮我解决一下如何简单地解决这个复杂的计算
答案 0 :(得分:0)
你可以试试这个: -
SELECT (SUM(TAB2.OpnTime) / (TAB3.Time - (SUM(TAB2.SetupTime))) * 100
FROM TAB2, TAB3;
这可能会对你有帮助。
答案 1 :(得分:0)
正如你所说,你在评论部分的所有假设都是正确的,这是一个解决方案:
select
(m1.opntime + m2.opntime + m3.opntime) /
(s.time - m1.setuptime - m2.setuptime - m3.setuptime) * 100
from t
join m1 on m1.machine = t.machine1
join m2 on m2.machine = t.machine2
join m3 on m3.machine = t.machine3
join s on s.shift = t.shift;
只需正确设置括号即可。由于t中只有一条记录,每台机器只有一条记录,而每秒只有一条记录,这是最容易和最快的方法。例如,不需要聚合。 (鉴于此,我想知道你的实际问题是什么。看起来很容易。你哪里失败了?)
编辑:如果你的列不是小数,而是整数,那么你必须转换为十进制。在整数数学中,120/260是0.在十进制数学中,120/260是0.4615 ...
select
cast(m1.opntime + m2.opntime + m3.opntime as decimal) /
cast(s.time - m1.setuptime - m2.setuptime - m3.setuptime as decimal) * 100
from t
join m1 on m1.machine = t.machine1
join m2 on m2.machine = t.machine2
join m3 on m3.machine = t.machine3
join s on s.shift = t.shift;