求SQL语句(100分)

  • 主题发起人 主题发起人 DickWu
  • 开始时间 开始时间
D

DickWu

Unregistered / Unconfirmed
GUEST, unregistred user!

我在使用ADOQuery的时候,开始的语句是 :

select avg(price1), avg(price2),avg(price3),avg(price4)
from pricedata
where
writedate> :Date1 and writedate< :Date2

该句执行正常,没有错误,后来应要求该为以下语句时,执行的时候一直出错.

select (max(price1)-min(price1))/:SetDevice1,
(max(price2)-min(price2))/:SetDevice2,
price3,price4
from pricedata
where
writedate> :Date1 and writedate< : Date2

这里用到4个参数 :SetDevice1, :SetDevice2, :Date1, :Date2
原来只是

请问是怎么回事? 哪位能帮我写一下同样功能的SQL语句?
 
:setdevice1 和 :setdevice2 是做为字段么?
SQL 语句里,字段不能为参数的,自己组合语句吧
 
逻辑关系的问题
avg(price1), avg(price2),avg(price3),avg(price4)
数据库可以确定您的需求。
可是如果:
select price1,avg(price1),......就不行了。
出错提示:Column 'Iknow.k_id' is invalid in the select list because it is not
contained in an aggregate function and there is no GROUP BY clause.
解决方法:加上 group by price1

 
你想一想,select (max(price1)-min(price1))/:SetDevice1和(max(price2)-min(price2))/:SetDevice2
得到的是一行记录,而select price3,price4 很可能得到一个数据集合,当然不能放在一起了,要加上
group by
 
试试这句——
select a.*, b.*
from
(select (max(price1)-min(price1))/:SetDevice1 price1,
(max(price2)-min(price2))/:SetDevice2 price2,
from pricedata
where writedate> :Date1 and writedate< : Date2) a,
(select price3, price4 from pricedata
where writedate> :Date3 and writedate< : Date4) b
(——其中参数Date3=Date1,Date4=Date2)
 
group by price1,price2,price3,price4
 
不好意思,我上次写错了,SQL语句改动后应该是:
select (max(price1)-min(price1))/:SetDevice1,
(max(price2)-min(price2))/:SetDevice2,
avg(price3),avg(price4)
from pricedata
where
writedate> :Date1 and writedate< :Date2
产生的4个数据集是放在报表上.可是每次执行的时候总是出错.
不知道是什么原因.
 
到底是出错还是结果不对?在IDE下执行报什么错?
再不行把参数换成实际的值到SQL Explorer里执行一下看是什么错。
 
参数换成常数到SQL2000管理器中去执行是正常的.
出错信息忘了----前两天的事,哎,记性太坏了 :( 不过记得好象是Syntax Error or ....
出错的处理类好象是EOleException,跟踪后发现在执行OpenCursor(好象是这个)的时候印发错
误的).
SQL语句全部如下:(做报表用的数据源)
select (max(price1)-min(price1))/:SetDevice1,
(max(price2)-min(price2))/:SetDevice2,
avg(price3),avg(price4),
max(price1)-min(price1),
max(price2)-min(price2),
avg(price5),avg(price6),
avg(price7),avg(price8),
avg(price9),avg(price10),
avg(price11),avg(price12)
from pricedata
where
writedate>= :Date1 and writedate<= :Date2

是不是在Select部分不支持参数啊? 或者SQL2000不支持这种做法? 或者AdoQuery不支持?
 
>>是不是在Select部分不支持参数啊?
Select部分是可以用参数的。
>>或者SQL2000不支持这种做法? 或者AdoQuery不支持?
这个就不知道了。
大不了拼SQL呗:) ——
'select (max(price1)-min(price1))/' + IntToStr(SetDevice1)
+ ',(max(price2)-min(price2))/' + IntToStr(SetDevice2)
+ ',...';
 
接受答案了.
 

Similar threads

后退
顶部