高分相送,这张表的查询,怎么用语句实现
这样的一张表: 10000 11000 12000
200 6 8 10
400 4 7 9
如:我要查 11000/200 对应的值为 8
10500/200 对应的值用差值算法计算出来:
6+(8-6)*(10500-10000)/(11000-10000)
也可qq联系:20397776 国庆节哈哈 分数不够再给
问题点数:0、回复次数:12Top
1 楼47522341(睡到8:30)回复于 2003-10-01 16:05:07 得分 0
有点不明白楼主的意思,说的再清楚些可能就有人理你了,^_^感觉应该不是一个特别难的问题,但被哥们这么一问反而变得复杂了;^_^Top
2 楼dmyang(小仔)回复于 2003-10-01 16:19:36 得分 0
样的一张表:x1\x2 10000 11000 12000
200 6 8 10
400 4 7 9
如:我要查 x1=200 ,x2=11000 对应的值为 8
x2=10500/x1=200 对应的值用差值算法计算出来:
6+(8-6)*(10500-10000)/(11000-10000)
Top
3 楼goldstar365(星光宝盒)回复于 2003-10-01 16:51:25 得分 0
这个问题的关键是:如何存储你的数据,也就是数据结构设计问题:
如果数据量不大:可以这样存储
x1 x2 x3
200 10000 6
200 11000 8
200 12000 10
400 10000 4
400 11000 7
400 12000 9
数据按X,y排序
1查找 x1=200 ,x2=11000 对应的值为 8 得到记录号
2查找 上一条记录值 的 6
3 计算最后值
如果数据量大,而且x2排列没有规律, 可以向你这样建库tab1,
然后把x2另存一个表tab2 关键是能得到当前x2 的前一个记录的值,对应tab1的字段名,,然后再去库tab1中查找
x2
10000
11000
12000
Top
4 楼xbm2002()回复于 2003-10-01 17:07:00 得分 0
不明白,你究竟要查什么?Top
5 楼dmyang(小仔)回复于 2003-10-01 17:32:38 得分 0
关键问题就是,原来表的数据非常大,x1从200 500 800 一直到42000
x2 从 80000 85000 90000 95000 一直到 230000
假如用人来查表计算,问题是很简单的,但是用计算机编程却不知道怎么写了,Top
6 楼dmyang(小仔)回复于 2003-10-01 17:48:23 得分 0
很多谢你帮我想办法,对啊,问提是很简单啊,关键是不知道怎样去重新构建表的结构Top
7 楼zousoft(菜菜鸟的战斗诗歌)回复于 2003-10-01 18:03:44 得分 0
像是个数学查表的dd
x1 x2 value
--- --- ---
200 10000 6
200 11000 8
200 12000 10
400 10000 4
400 11000 7
400 12000 9
...
if x2 mod 1000 = 0 then
//选取x1=x1, x2=x2的value
else
//选取x1=x1, x2=trunc(x2/1000)*1000的value -> A
//选取x1=x1, x2=trunc(x2/1000)*1000+1000的value -> B
答案为:A+(B-A)*(x2-trunc(x2/1000)*1000)/1000Top
8 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2003-10-02 00:28:16 得分 0
麻烦的东西哦
整理数据,放到数据库中处理会简单不少的Top
9 楼ghostmaster(一刀)回复于 2003-10-02 00:42:53 得分 0
xue xiTop
10 楼gardenyang(天高云淡)回复于 2003-10-02 10:58:03 得分 0
goldstar365(星光宝盒)说得很有道理!Top
11 楼dmyang(小仔)回复于 2003-10-02 13:07:26 得分 0
星光宝盒,你的第二种对于数据很大的,我没有看懂,可以帮我讲清楚一下吗?
我已经按照你说的第一种方法重新做表,发觉很大,原来一张表有40个行,20个列,现在变成了40*20个行,3个列,这样做可以做到了。但是一共有10张这样的表,全部重新做,很大工程啊
有没有别的方法或思路啊?Top
12 楼hiflower(花)回复于 2003-10-04 16:58:39 得分 0
建一个表 table1:
x1 field1 field2 field3
200 6 8 10
400 4 7 9
再建一个表 table2,用于存储 x2 的值在 table1 中相应的字段名:
x2 fieldname_in_table1
10000 field1
11000 field2
12000 field3
with ADOQuery do
begin
Close;
SQL.Text:='SELECT *'+
' FROM table2'+
' WHERE x2=(SELECT Max(x2) FROM table2 WHERE x2<:x2)';
Parameters.ParamByName('x2').AsInteger:=10500;
Open;
x2FirstValue:=FieldValues['x2'];
x2FirstName:=FieldValues['fieldname_in_table1'];
Close;
SQL.Text:='SELECT *'+
' FROM table2'+
' WHERE x2=(SELECT Min(x2) FROM table2 WHERE x2>:x2)';
Parameters.ParamByName('x2').AsInteger:=10500;
Open;
x2SecondValue:=FieldValues['x2'];
x2SecondName:=FieldValues['fieldname_in_table1'];
Close;
SQL.Text:='SELECT ' + x2FirstName + ',' + x2SecondName +
' FROM table1'+
' WHERE x1=:x1';
Parameter.ParamByName('x1').AsInteger:=200;
Open;
y:=FieldValues[x2FirstName]+(FieldValues[x2SecondName]-FieldValues[x2FirstName])*(x2-x2FirstValue)/(x2SecondValue-x2FirstValue); //6+(8-6)*(10500-10000)/(11000-10000)
end;
应该可以搞定吧 ^_^Top




