随机地对行进行求和

时间:2011-03-16 15:25:29

标签: sql

我想在新的temp_table中随机插入下面的初始表中的记录,按新的PO编号(1234-1,1234-2等)对它们进行分组,其中每个组合(TKG)是&lt; ; 20和sum(TVOL)<0.1

INITIAL TABLE 

lineID  PO  Item    QTY Weight  Volume  T.KG    T.VOL
1   1234    ABCD    12  0.40    0.0030  4.80    0.036
2   1234    EFGH    8   0.39    0.0050  3.12    0.040
3   1234    IJKL    5   0.48    0.0070  2.40    0.035
4   1234    MNOP    8   0.69    0.0040  5.53    0.032
5   1234    QRST    9   0.58    0.0025  5.22    0.023
6   1234    UVWX    7   0.87    0.0087  6.09    0.061
7   1234    YZAB    10  0.71    0.0064  7.10    0.064
8   1234    CDEF    6   0.69    0.0054  4.14    0.032
9   1234    GHIJ    7   0.65    0.0036  4.55    0.025
10  1234    KLMN    9   0.67    0.0040  6.03    0.036

NEW Temp_Table should look like:

LineID  PO  Item    QTY Weight  Volume  T.KG    T.VOL
1   1234-1  ABCD    12  0.40    0.0030  4.80    0.036
2   1234-1  EFGH    8   0.39    0.0050  3.12    0.040
5   1234-1  QRST    9   0.58    0.0025  5.22    0.023
3   1234-2  IJKL    5   0.48    0.0070  2.40    0.035
4   1234-2  MNOP    8   0.69    0.0040  5.53    0.032
8   1234-2  CDEF    6   0.69    0.0054  4.14    0.032
6   1234-3  UVWX    7   0.87    0.0087  6.09    0.061
10  1234-3  KLMN    9   0.67    0.0040  6.03    0.036
9   1234-4  GHIJ    7   0.65    0.0036  4.55    0.025
7   1234-4  YZAB    10  0.71    0.0064  7.10    0.064

我无法弄清楚如何编码...

2 个答案:

答案 0 :(得分:0)

这可能是游标的工作。

算法基本上可以是这样的:

  • 逐个收集初始表格中的行,累积sum(TKG)sum(TVOL)
    • 在条件仍然满足的情况下将行引入临时(省略超过任何总和的行);
    • 使用lineID作为订单;
    • 迭代到列表的末尾。
  • 在点击表格末尾时,将其称为一个组,然后重新开始,省略已经收集到temp中的行。
  • 继续,但仍然没有收集行。

但是我现在懒得发出实际的代码,除了它是一个功课,游标还是讨厌我。

答案 1 :(得分:0)

1234-1,1234-2等的逻辑是将记录分成代表纸箱的组。如果订单有100个订单项,我可能需要n个纸箱(n组)来包装所有商品。