一个表为:
编好 金额
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 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 也可以
query1.open;
first;
if query1.recordcount>4 then
delete;
delete;
编号 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 <-平均数(水平所限,居然花了两个小时,呜呜~~)