请问关于数据进行每月统计的SQL语句语法? (50分)

  • 主题发起人 主题发起人 rocken2
  • 开始时间 开始时间
R

rocken2

Unregistered / Unconfirmed
GUEST, unregistred user!
比如说表中有:
id money ddate三个字段,日期字段的类型是A(用的是desktop数据库)
001 22.00 20021010
002 213.00 20021011
003 21.00 20021013
004 46.00 20021111
005 65.23 20021201
006 65.30 20010202
007 12.34 20030101
我想按月对money字段进行统计 ,请问这sql语句要怎么写?
SQL.ADD('SELECT SUM(MONEY) FROM BIAO.DB GROUP BY ??????')
好像主要是时间怎么去掉后面的日期,是不是?
还有如果用的是mysql或access数据,语法是不是一样?
谢谢
 
如果用的是mysql或access数据
select sum(money),left(ddate,5,2)
from tablename
where left(ddate,1,4)='2002'
group by left(ddate,5,2)
 
上面的在desktop中好像不行:
1、在SQL.ADD('SELECT……')已经有单引号,而在2002中的两个单引号程序编译时不认
得了,这种情况是不是要再加几个引号啊?(SQL偶不熟的说:))
2、Left好像也不认得?运行进提示:invilid use of keyword token:left(ddate,5,2)
line number 1
 
sql.add('select sum(money),substring(ddate from 5 for 2)');
sql.add(' from tablename ');
sql.add('where substring(ddate from 1 for 4)=''2002''');
sql.add('group by substring(ddate from 5 for 2)');
试试!
 
好像还是不行,程序运行时提示:capability not supoerted
还有那个,时间不只是局限在2002,过两天就2003了呀。
 
先用变量保存现在的月份。
var
x:=formatdatetime('yyyymm',now)
SQL.ADD('SELECT SUM(MONEY) FROM BIAO.DB where ddate like'+''''+ x+'''')
 
select sum(money) where yeay(ddate)='' and month(ddate)=''
怎么样?
 
可以把日期先转化成字符,再取前6个字符进行GROUP BY.。
oracle 的句子是这样的:select sum(money) from biao.db group by substr(to_char(ddate,'yyyymm'),1,6)
 
Select Sum(Money) from Table Group by SubString(dDate,1,6)
 
SQL.Text := 'select sum(money),left(ddate,5,2) +
' from tablename '+
' where left(ddate,1,4)=''' + Left(dDate,5,2) + '''' +
' group by left(ddate,5,2) ';
这样试试应该可以
 
不好意思少写了一个
SQL.Text := 'select sum(money),left(ddate,5,2) ' +
' from tablename '+
' where left(ddate,1,4)=''' + Left(dDate,5,2) + '''' +
' group by left(ddate,5,2) ';
 
谢谢各位大大的回答!谢谢
只是上面的方法,我试了好像都不行,不知道是怎么回事?
我现在是用desktop数据库,我试着用上面的方法时,用substr,substring,left
等截取日期的,程序运行时好像都不认得,也不知哪里错了:(
 
select left(ddate,1,6),sum(monery) from table1 group by left(ddate,1,6)
这句不行吗?

 
to blackbook:
运行后会出现::invilid use of keyword token:left(ddate,1,6)
line number 1
我用desktop数据表,ddate我改成中文字段名了,有影响吗?
 
desktop(bde桌面数据引擎)的sql语句有很大的限制。ru:没有 left,right之类。可以用
substring(ddate from 1 for 6) 代替 left(ddate,1,6);
而且 在group by的分组语句后面的分组字段一定是要存在的字段 不能是函数,或者其他的
计算字段。
你可以在建一个字段 单独保存年月,可以实现。
但 我建议你放弃用bde操作桌面数据库。还是用ado吧。
 
谢谢各位老大,我用新建了一个字段来做了,
已经实现,谢谢
 
后退
顶部