在某些条件下不断减去价值

时间:2014-06-23 09:20:28

标签: sql process conditional-statements subtraction

Man.No     ProdNumber     Sequence   Code    Process1Time   Process2Time     Standard
 1330        01864       1        H3       113           43
 1330        01865       2        H3        97           39
 1330        01866       3        H1        72           41
 1330        01867       4                  56           39
 1330        01868       5        H3        50           39
 1330        01869       6        H1        43           41
 1330        01870       7                  39           40
 1331        01871       1        H2A       64           42
 1331        01872       2        H2A       56           41
 1331        01873       3        H2A       53           41
 1331        01874       4        H2A       49           39
 1331        01875       5        H2A       44           38

大家好,这个问题在过去的几个星期里一直困扰着我,我决定现在问,这对我来说并不是那么简单。我要计算过程标准时间。

这是故事,直到现在我手动完成了这个故事,条件是:

代码以H3或A3开头,开始时间为78 其他代码或空数据,开始时间为68

我们计算每个人的标准。例如,在Man.No = 1330,序列从1到7,对于序列号7在Man.No 1330,代码是空白的,标准将是 68 (仅供参考:序列号是可变的,可能是7,12,8或2,取决于具体情况)

Man.No     ProdNumber     Sequence   Code    Process1Time   Process2Time   Standard
 1330        01864       1        H3       113           43
 1330        01865       2        H3        97           39
 1330        01866       3        H1        72           41
 1330        01867       4                  56           39
 1330        01868       5        H3        50           39
 1330        01869       6        H1        43           41
 1330        01870       7                  39           40             68
 1331        01871       1        H2A       64           42
 1331        01872       2        H2A       56           41
 1331        01873       3        H2A       53           41
 1331        01874       4        H2A       49           39
 1331        01875       5        H2A       44           38

之后,要使用H1代码计算序列号6,必须以68'开头,我们必须使用以下公式计算: 提前标准(68)+(45-(当前Man.No的Process2Time的平均值))所以它将是(68)+(45 - ((43 + 39 + 41 + 39 + 39 + 41 + 40)/ 7) ))= 68+(45-40.3)= 68 + 4.7 = 72.7

Man.No     ProdNumber     Sequence   Code    Process1Time   Process2Time     Standard
 1330        01864       1        H3       113           43
 1330        01865       2        H3        97           39
 1330        01866       3        H1        72           41
 1330        01867       4                  56           39                
 1330        01868       5        H3        50           39          
 1330        01869       6        H1        43           41           72.7
 1330        01870       7                  39           40           68
 1331        01871       1        H2A       64           42
 1331        01872       2        H2A       56           41
 1331        01873       3        H2A       53           41
 1331        01874       4        H2A       49           39

1331 01875 5 H2A 44 38

之后,要计算序列号为5的H3码,必须以78'开头,因为我需要更多时间(10')来处理产品,我们必须用这个公式计算:提前标准(72.7)+(45-(当前Man.No的Process2Time的平均值) +10 )。所以它将是:(72.7)+(45 - ((43 + 39 + 41 + 39 + 39 + 41 + 40)/ 7))) +10 = 72.7+(45-40.3) +10 = 72.7 + 4.7 + 10 = 87.4

Man.No     ProdNumber     Sequence   Code    Process1Time   Process2Time   Standard
 1330        01864       1        H3       113           43
 1330        01865       2        H3        97           39
 1330        01866       3        H1        72           41
 1330        01867       4                  56           39                
 1330        01868       5        H3        50           39           87.4
 1330        01869       6        H1        43           41           72.7
 1330        01870       7                  39           40           68
 1331        01871       1        H2A       64           42
 1331        01872       2        H2A       56           41
 1331        01873       3        H2A       53           41
 1331        01874       4        H2A       49           39
 1331        01875       5        H2A       44           38

之后,要计算序列号4,空白码必须以68'开头,我们必须用这个公式计算:提前标准(87.4)+(45-(当前Man.No的Process2Time的平均值) ))。所以它将是:(87.4)+(45 - ((43 + 39 + 41 + 39 + 39 + 41 + 40)/ 7)))= 87.4+(45-40.3)= 87.4 + 4.7 = 92.1

Man.No     ProdNumber     Sequence   Code    Process1Time   Process2Time   standard
 1330        01864       1        H3       113           43
 1330        01865       2        H3        97           39
 1330        01866       3        H1        72           41
 1330        01867       4                  56           39           92.1 
 1330        01868       5        H3        50           39           87.4
 1330        01869       6        H1        43           41           72.7
 1330        01870       7                  39           40           68
 1331        01871       1        H2A       64           42
 1331        01872       2        H2A       56           41
 1331        01873       3        H2A       53           41
 1331        01874       4        H2A       49           39
 1331        01875       5        H2A       44           38

继续使用带有H1代码的序列3,所以我们只需要加上4,7即92.1 + 4.7 = 96.8

Man.No     ProdNumber     Sequence   Code    Process1Time   Process2Time   Standard
 1330        01864       1        H3       113           43
 1330        01865       2        H3        97           39
 1330        01866       3        H1        72           41           96.8
 1330        01867       4                  56           39           92.1 
 1330        01868       5        H3        50           39           87.4
 1330        01869       6        H1        43           41           72.7
 1330        01870       7                  39           40           68
 1331        01871       1        H2A       64           42
 1331        01872       2        H2A       56           41
 1331        01873       3        H2A       53           41
 1331        01874       4        H2A       49           39
 1331        01875       5        H2A       44           38

之后继续使用H3 Code的序列号2,记住,需要+10。所以它将是96.8 + 4.7 + 10 = 111.5

Man.No     ProdNumber     Sequence   Code    Process1Time   Process2Time   Standard
 1330        01864       1        H3       113           43
 1330        01865       2        H3        97           39           111.5
 1330        01866       3        H1        72           41          96.8
 1330        01867       4                  56           39          92.1 
 1330        01868       5        H3        50           39          87.4
 1330        01869       6        H1        43           41          72.7
 1330        01870       7                  39           40           68
 1331        01871       1        H2A       64           42
 1331        01872       2        H2A       56           41
 1331        01873       3        H2A       53           41
 1331        01874       4        H2A       49           39
 1331        01875       5        H2A       44           38

所以最后我们转到第一个序列,它不会加+10,因为序列2也是H3 / A3需要相同的处理时间,所以我们只需要计算,111.5 + 4.7 = 116.2

Man.No     ProdNumber     Sequence   Code    Process1Time   Process2Time   Standard
 1330        01864       1        H3       113           43           116.2
 1330        01865       2        H3        97           39           111.5
 1330        01866       3        H1        72           41           96.8
 1330        01867       4                  56           39           92.1 
 1330        01868       5        H3        50           39           87.4
 1330        01869       6        H1        43           41           72.7
 1330        01870       7                  39           40           68
 1331        01871       1        H2A       64           42
 1331        01872       2        H2A       56           41
 1331        01873       3        H2A       53           41
 1331        01874       4        H2A       49           39
 1331        01875       5        H2A       44           38

多数,这对我来说太可怕了,这就是为什么我想问这里,如果你认为我解释这个问题太复杂了,我不这么认为,因为这是解释这个可怕的事情最简单的方法。如果有人可以提供帮助,我将非常感激。

非常感谢你!

1 个答案:

答案 0 :(得分:0)

因此,为了在sql中执行此操作,首先需要为Standard提供一个公式,该公式不依赖于下一个序列的标准值。第一部分很简单。如果代码是H3或A3,则需要78,否则需要68。

公式的下一部分基于平均值。您将需要具有相同Man.No的数据的所有process1次的平均值。随着我们向上移动序列,我们将这个平均值一次又一次地添加到原始值。使用您的示例,对于序列6,我们将平均值添加一次。对于序列5,我们将平均值加两次,对于序列4,我们将其加3次。这成为平均值*(最大序列# - 当前序列号)。对于序列7,我们将在0次上添加平均值。

这基本上就是您正在使用的整个公式。现在,我们可以在sql中使用此公式找到这些值。请注意,此代码未经过测试,不包含您的具体信息,因为您的问题中未包含这些详细信息。

Select
    t.ManNum,
    t.ProdNum,
    t.Sequence,
    t.Code,
    t.Process1Time,
    t.Process2Time,
    (Select sum(Process1Time) / sum(1)
        From tabletbl t2
        Where t2.ManNum = t.ManNum
        Group by t2.ManNum)
    * ((Select max(Sequence)
         From tabletbl t2
         Where t2.ManNum = t.ManNum
         Group by t2.ManNum))-t.Sequence)
    + Case When (t.Code = H3 or t.Code = A3) Then 78 else 68 End
    as Standard
From tabletbl t