来自不同表的复杂浮点计算

时间:2014-11-10 07:52:58

标签: mysql sql sql-server-2008

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%

你能帮我解决一下如何简单地解决这个复杂的计算

2 个答案:

答案 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;