一个表为:
  编好   金额
   1    100.00
   1    200.00
   1    300.00
   1     10.00
   2    300.00
   2    210.00
   2     20.00
变为:
  编好   金额
   1    100.00
   1    200.00
   1    300.00
   1     10.00
   1    200.33  // (相同的编号记录数少于等于4个时,金额去掉最少的一个(有相同的也只去一个),再求平均((100+200+300)/3)  本人就是难在:金额也相同时,去多了。不知道如何只去掉 一个
   2    302.00
   2    210.00
   2     20.00
   2    100.00
   2     20.00
   2    204.00//相同的编号记录数大于4个时,去掉少的两个,再求平均((302+210+100)/3) 。
注:不要用存储过程。就可以了。多些几个insert 也可以

解决方案 »

  1.   

    query1.sql.add('select * from 表 where 编好=2 order by 金额 ');
    query1.open;
    first;
    if query1.recordcount>4 then
     delete;
    delete;
      

  2.   

    如果是SQL SERVER的话:create table table1(
      编号 int,
      金额 int)INSERT table1([编号],[金额]) VALUES (1,100.00)
    INSERT table1([编号],[金额]) VALUES (1,200.00)
    INSERT table1([编号],[金额]) VALUES (1,300.00)
    INSERT table1([编号],[金额]) VALUES (1,100.00)
    INSERT table1([编号],[金额]) VALUES (2,302.00)
    INSERT table1([编号],[金额]) VALUES (2,210.00)
    INSERT table1([编号],[金额]) VALUES (2,20.00)
    INSERT table1([编号],[金额]) VALUES (2,20.00)
    INSERT table1([编号],[金额]) VALUES (2,20.00)
    --先为数据加上自增字段num(利用临时表#tmp1)
    SELECT IDENTITY(INT,1,1) AS num,* INTO #tmp1 FROM table1
    --按要求支掉数据(筛选后的数据放到临时表#tmp2)
    SELECT * INTO #tmp2 FROM #tmp1 a
    WHERE a.num NOT IN (SELECT TOP 1 num FROM #tmp1
                        WHERE [编号]=a.[编号] AND EXISTS(
                          SELECT 1 FROM table1 
                          WHERE [编号]=a.[编号]
                          GROUP BY [编号]
                          HAVING COUNT(*)<=4)          
                        ORDER BY [金额]
                        ) AND
          a.num NOT IN (SELECT TOP 2 num FROM #tmp1
                        WHERE [编号]=a.[编号] AND EXISTS(
                          SELECT 1 FROM table1 
                          WHERE [编号]=a.[编号]
                          GROUP BY [编号]
                          HAVING COUNT(*)>4)          
                        ORDER BY [金额]
                        )--对筛选后的数据按编号求平均值,再把插到临时表#tmp2里
    INSERT #tmp2 ([编号],[金额])
    SELECT [编号],AVG([金额]) FROM #tmp2
    GROUP BY [编号]--最后临时表#tmp2里的就是所要的数据了
    SELECT * FROM #tmp2
    ORDER BY [编号],num把以上直接粘贴到查询分析器里运行,结果如下:
    原始测试数据:
    编号     金额
    1 100
    1 200
    1 300
    1 100
    2 302
    2 210
    2 20
    2 20
    2 20处理后的数据:
    1 200
    1 300
    1 100
    1 200  <-平均数
    2 302
    2 210
    2 20
    2 177 <-平均数(水平所限,居然花了两个小时,呜呜~~)