CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  数据库相关

高分相送,这张表的查询,怎么用语句实现

楼主dmyang(小仔)2003-10-01 14:08:13 在 Delphi / 数据库相关 提问

这样的一张表:       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

相关问题

  • 如何实现ASP多表查询?
  • 一个CRecordSet实现多表的查询?
  • 怎样实现这两个表查询~~~
  • 怎么实现对多表查询
  • 请问如何用语句实现增加和删除一个表的列
  • 如何用SQL实现交叉表查询?
  • 在Delphi中如何用SQL实现交叉表查询?
  • 如何实现数据表的关联查询
  • 怎样实现多表查询啊?在线等待
  • 怎么实现月份的报表查询?

关键词

  • 数据
  • x2
  • 表
  • fieldvalues
  • secondname
  • 计算
  • 查找
  • 应的值
  • firstname
  • tab

得分解答快速导航

  • 帖主:dmyang

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo