我想你是要按照不同的Bl_no求和吧,应该在后面再加上
SqlStr := SqlStr+" group by bl_no"
SqlStr := SqlStr+" group by bl_no"
解决方案 »
- delphi 窗体调用
- 怎样载入TXT 给combobox
- 高分求如何在dbgrid中如何用鼠标拖动记录。例如将第二条记录拖动到第一条的位置,使之成为第一条。
- 怎样查找到当前有输入焦点的窗口
- 菜鸟问问题,adoquery的parameters到底怎么用啊,请给个小例子。
- 菜鸟问题:谁能介绍一下用delphi编的程序对系统内存的需求?
- 请问,关于查询的有关问题
- ADOconnection连接access2000出错,望各位指点
- 请问高手们:怎样编程实现在发信时smtp服务器认证
- 如何虚拟按下键盘上的“ALT+S”???
- 如何获知客户端已启动,并获取客户端的IP或主机名?
- 开一个delphi初学讨论会!!!
多谢老兄
我的不是分组问题,每条记录只有一个gp20'、hq20、...
试了你的方法还是老样子
TKS!
多谢
我的不是分组问题,整个表中没有重复的bl_no字段,但这个字段不是关键字
TKS!
我的不是分组问题,
整个表中没有重复的bl_no字段,
但这个字段不是关键字之所以要用到该字段,是要用户输入bl_no后
可以查询该bl_no对应的值,虽然只有一条,
如果用日期段查询,则有很多个bl_no,及统计值
不需要分组
2.其它好象没有错,不用加group,如果真如你所说,b_no唯一
字段拼写没错
我还发现一个奇怪现象
不能加任何非统计字段bl_no或bl_date...之类的
只能加统计字段
sum(gp20),sum(hq20),sum(ot20),sum(el20), sum(gp40),sum(hq40),sum(ot40),sum(el40)
这才奇怪呀
select a.bl_no,b.* from incont a,
(select sum(gp20),.... from incont) b;或者
select bl_no, (select sum(gp20) from incont) sum_gp20,.....
from incont取决于你的数据是否支持第一种写法。
老兄:按照你的方法我已成功修改的原程序,但随之而来的问题是,查询条件不起作用,datetimepicker1.DateTime 及datetimepicker2.DateTime均有值, 错误提示:tempQ未发现参数'date1' 原代码如下,请指教!!!
with frmdatamod.TempQ do
begin
Close;
SQL.Clear;
SqlStr:=' select a.bl_no,a.bill_date,a.oper_dock,';
SqlStr:=SQLStr+' b.* from incont a, (select sum(gp20),';
SqlStr:=SQLStr+'sum(hq20),sum(ot20),sum(el20), ';
SqlStr:=SQLStr+' sum(gp40),sum(hq40),sum(ot40),sum(el40) ';
SqlStr:=SQLStr+' from incont ) b ';
SqlStr:=SQLStr+' where a.bill_date between :date1 and :date2';
Parameters.ParamByName('date1').Value:=datetimepicker1.DateTime ;
Parameters.ParamByName('date2').Value:=datetimepicker2.DateTime ;
SQL.Add(sqlstr);
Open;
end;
SqlStr:=SQLStr+' sum(gp40),sum(hq40),sum(ot40),sum(el40) ';
SqlStr:=SQLStr+' from incont where a.bill_date between :date1 and :date2) b ';
你再试试看
按照你的方法试了,还是不行
TKS!
实在不行的话,用两个query分别查出
这样可否实现你的功能?
SqlStr:=SQLStr+' sum(gp40),sum(hq40),sum(ot40),sum(el40) ';
SqlStr:=SQLStr+' from incont where bill_date between :date1
~~~~
把a.去掉
and :date2) b ';
我觉的你的的想法有些问题,
如果按时间段查询,则统计值只有一条记录,而bl_no有多个值,它们不能放在一个SELECT 里,除非让统计值重复,可是你在界面上又怎么显示呢?
select bl_no,sum(gp20),sum(hq20),sum(ot20),sum(el20),
sum(gp40),sum(hq40),sum(ot40),sum(el40)
from incont
这样的sql 一定要group by bl_no
你的bl_no是个值吗?
作为param 不就行了,象这样
select :bl_no,sum(gp20),sum(hq20),sum(ot20),sum(el20),
sum(gp40),sum(hq40),sum(ot40),sum(el40)
from incont
group by :bl_no
然后传paramByName('bl_no').as... := ???
或者再套上一层,象这样
select bl_no a.*
from
(
select sum(gp20) sum_gp20,
sum(hq20) sum_hq20,
sum(ot20) sum_ot20,
sum(el20) sum_el20,
sum(gp40) sum_gp40,
sum(hq40) sum_hq40,
sum(ot40) sum_ot40,
sum(el40) sum_el40
from incont
) a
但是如果使用了sum等函数,则Select后列的字段不在sum等函数中,就必须在group by 子句中,这是Sql语法规定的,且在我看来也很合理,只是我不清楚你要用这个sql语句表达什么,所以不知道该怎么写,但是你给的句子在语法上就是错的。
试一下:select sum(**),sum(***)...where bl_no=(select bl_no from incont) group by bl_no
很奇怪!
select incort.bl_no,b.sgp20 from incort join (select sum(gp20) as sgp20,bl_no from incort group by bl_no) as b on b.bl_no=incort.bl_no总之
select 旧表.唯一值,新表.合计值字段 from 旧表 join (select 合计(xxx) as 合计值字段,唯一值 from 旧表 group by 键值) as 新表 on 新表.键值=旧表.键值
&^&^&)(*&(*^$%$##$@$#^()&_)*(_)((*^&^#$
$%#$&%^*(^(_*_(_)(*&^&^$^#(*&_)(_+)((&(^&$$# 晕!
倒!!
好复杂哟!!!
请问老兄在哪儿看到的
厉害,值得研究