access表R, 结构(日期 站点 R2020),字段都为文本,
日期     站点 R2020
20000101 长沙 0001
20000102 长沙 0121
20000103 长沙 0131
20000104 长沙 0351
 ....
20000101 湘潭 0021
20000102 湘潭 0231
20000103 湘潭 0121
... ... ...
20000101 株洲 0021
20000102 株洲 0231
20000103 株洲 0121
.....
要求出各个站点日期:时间1-时间2  R2020的和,结果如下:
时间1-时间2  站点1sum   站点2sum  站点3sum....

解决方案 »

  1.   

    其实楼主你这帖子去  SQL 专区发帖,更容易获取回答
    SQL 区逻辑高手太多了,这种纯逻辑的问题,很伤脑子的嗷呜.
      

  2.   

    select sum(CAST(r2020 AS int)) as msum,msite from test where mdate>='20000301' and mdate<='20040301' group by msite
      

  3.   

     if OBJECT_ID('R') IS not null
    drop table R
    GO
    create table R
    (日期 varchar(50),站点  varchar(50),R2020 varchar(50))
    insert into R values('20000101' ,'长沙', '0001')
    insert into R values('20000102' ,'长沙', '0121')
    insert into R values('20000103' ,'长沙', '0131')
    insert into R values('20000104' ,'长沙', '0351')insert into R values('20000101' ,'湘潭', '0021')
    insert into R values('20000102' ,'湘潭', '0231')
    insert into R values('20000103' ,'湘潭', '0121')insert into R values('20000101' ,'株洲', '0021')
    insert into R values('20000102' ,'株洲', '0231')
    insert into R values('20000103' ,'株洲', '0121')
      
    --  如何求得两个任意时段的历年平均值?
    --  如:给定2个日期19800301和20040725,求每年0301到0725之间的和,再除以1980到2004之间的年数,即为历年平均值。--得到的数据格式:
    --站点 历年平均值
    --长沙 ----
    --湘潭 ----
    --株洲 ----
    --select * from R
    declare @riqi1 varchar(50)
    declare @riqi2 varchar(50)
    declare @riqi3 int
    declare @riqi4 int
    set @riqi1='19800301'    -------- 输入的日期
    --set @riqi2='19800303' 
     set @riqi2='20040725'    -------- 输入的日期
    set @riqi4=-1
    set @riqi3=cast(SUBSTRING(@riqi1,5,4)as int)
    while @riqi3<=CAST( SUBSTRING(@riqi2,5,4) as int)
    begin
     set @riqi4= @riqi4+1
     set @riqi3=@riqi3+1
    endselect @riqi4/nullif(CAST( SUBSTRING(@riqi2,1,4) as int)-CAST( SUBSTRING(@riqi1,1,4) as int),0)  as 历年平均值
        历年平均值
    -----------
    17(1 行受影响)
      

  4.   

    给出的两个时间字符串可以从表R中的字段:“日期”中查找的数据,但历年平均值指的应该是:
    如查找日期为20000302到20100623,则"站点""R2020"的历年平均值应该为:
    2000年03月02日到2000年06月23日"R2020"的和(S1)
    2001年03月02日到2001年06月23日"R2020"的和(S2)
    2002年03月02日到2002年06月23日"R2020"的和(S2)
    .........
    2010年03月02日到2010年06月23日的和(Sn)
    历年平均值:  SUM=(S1+S2+...Sn)/(2010-2000+1)
      

  5.   

    select sum(CAST(r2020 AS int)) as msum,msite from test where mdate>='20000301' and mdate<='20040301' group by msite
    问题1如上可以解决,我已解决。但现求4楼及10楼问题的解决方案,请大家帮思考下。再次谢谢了!
      

  6.   

    以下在sql2000查询分析器中可以实现上述功能:
    select 站点, SUM(CAST(R2020 AS INT)) AS 合计 from R   where  SUBSTRING(日期,5,4)>='0301' and SUBSTRING(日期,5,4)<='0331' and 日期 between '20000301' and '20000331' group by 站点但在access中用下句却不能实现:
              SQLstr:='select 站点, SUM(VAL(R2020))*0.1 AS 合计 from R'
              +' where left(日期,4)>="0301" AND left(日期,4)<="0331"'
              +' and 日期 between '+QuotedStr(startdate)+' AND '+QuotedStr(enddate)
              +' group by 站点';错在哪?
      

  7.   

    sql语句报错的话,在日期条件中的日期边界用#括起来,比如:#2012-12-12#
    sql语句能执行,数据不对的话,是access要把datetime后面的时间部分也要考虑进去,比如:#2012-12-12 00:00:01#
      

  8.   

    left改为Mid(string, start[, length])