关于SQL中分类加和问题(100分)

  • 主题发起人 主题发起人 mmwhy
  • 开始时间 开始时间
M

mmwhy

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个table,结构如下:
得分 日期
12.0 1999-10-1
9.8 1999-6-5
6.4 2000-1-4
... ...
其中日期为字符型,希望能实现按年份求出总分
如:1999年总分为21.8,2000年为6.4
我用的是:
select sum(得分),substring(日期 from 1 for 4) from table1
group by substring(日期 from 1 for 4)
可是总是出错,提示“Capability not supported”
请问: 1.SQL这样写可以吗?如果不,为什么?
2.有没有通过其他途径解决的办法?(只要实现按年份查总分即可。)
 
試一試
select sum(得分) from table1
where 日期 like '2000%'
 
>rixin
这样不行,我要求的查询结果是:
总分 日期
21.8 1999
6.4 2000
... ...
即有多少年就有多少列。你的SQL只能查询其中一年的。
 
LOCALSQL?
如果是的话,恐怕得分两部了,因为它的group by 不支持计算字段。
 
这个我会:
select sum(得分),substring(日期 from 1 for 4) as theyear from table1
group by theyear
 
>hansong
可以解释一下LOCALSQL吗?
何种SQL支持计算字段?
 
>liwei
我试过了,好像还不行.
提示"Invalid use of keyword"
 
LocalSQL是个标准SQL的子集,只有微乎其微的一些功能,很多SQL中的内容都不支
持,其它各种SQL所支持的标准也不一样,但功能都是很强的。
 
看了一下帮助,确实GROUP BY不支持计算计段。
Note
Derived values (calculated fields) cannot be used as
the basis for a GROUP BY clause.

What is local SQL?

Local SQL is the subset of the SQL-92 specification used
to access dBASE, Paradox, and FoxPro tables. On receving
local SQL statements from front-end applications, the
Borland Database Engine (BDE) translates the statements
into BDE API functions.
 
>hansong
谢谢你,不过我用的是Delphi自带的
SQL Builder,它是LOCALSQL吗?
如果使用其它的SQL,我该怎么办呢?
 
>liwei
..... 8< 那该怎么办呢,我现在很着急,那位大侠能帮我解决,
我可以再加100分。
 
如果是 Ms sql server 可以试一试下面的写法:

select sum(总分),year(convert(datetime,日期)) from Table
group by year(convert(datetime,日期))
 
你用的是PARADOX数据库吧。
向PARADOX和DBASE数据库,它使用的SQL语句只能是LOCAL SQL语句,
LOCAL SQL语句不支持GROUP BY 计算字段的用法。

所以,建议你在原表上加一个字段,记录年份。
具体实现如下:
1、加字段
alter table table1 add theyear char(4)
2、修改theyear的值
update table1 set theyear=substring(日期 from 1 for 4)
3、选择计算
select sum(得分),theyear
from table1
group by theyear
 
>yck
谢谢你的方法,我现在也是这样解决的。
但是觉得怪怪的,给表里加上一个本不需
要的字段总会不太舒服。
还有没有其他的解答呢?如果没有我就
给分了。
 
select * from Table1
where substring(日期,1,4)='1999'
 
>zmingguang51
你的方法还是只能查其中一年的
得分,我要的是所有年份的年总分。
 
1。以下语句在SQL SERVER下调试通过:(当然把中文换成相应英文字段)
select sum(得分) ,datename(yy,日期)
from mytable
group by datename(yy,日期)
在你的服务器上试一下,关于datename及yy查一下帮助。
2。“Capability not supported”应该是指你的'日期’字段不支持substring
 
我觉得这个问题不用再讨论了。
若他使用的是ORACLE或SQL SERVER等大数据库,则他原来的方法就可以了,
这些数据库支持的SQL语句功能很强。

关键在于他使用的是PARADOX之类的数据库,只能使用LOCAL SQL,
而LOCAL SQL的功能很弱,它不支持计算字段的分组统计(GROUP BY),
这在LOCAL SQL的HELP中写得很清楚了。
 
多人接受答案了。
 
很遗憾,只有第一个问题有回答,
如果有人能回答第二个问题,我还会
给分的。:|
 
后退
顶部