Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

请教一个查询设计问题

贺德才  发表于:2012-09-27 11:16:54  
复制

我有一个access表,其中有A、B、C、D四个数字字段。现在我要建一个查询,在查询中加字段E,且要使E等于前面一条记录中B+C-D的值。至于记录排序的问题我有日期字段来确定。该怎么做?谢谢

 

Top
沈军 发表于:2012-09-27 22:23:44
做了一个例子,看看点击下载此附件

沈军 发表于:2012-09-27 22:29:37
对是是统计前面一条记录中的B+C-D值点击下载此附件

贺德才 发表于:2012-09-28 08:22:33
谢谢。我看了且试了你的设计,运行的结果只能保证最后一条记录的结果是正确的,其他均不正确。你可以多输入几行试一下。

煮江品茶 发表于:2012-09-28 11:39:44
select *,dlast("B+C-D","阁下数据表名称","阁下的id字段名<" & 阁下的id字段名) as E
from 阁下数据表名称

贺德才 发表于:2012-09-28 15:28:54
感谢4楼煮江品茶高手,非常好。再继续请教:如果这个E字段除了计算上条记录中B+C-D的值外,同时还要加上本条记录中A的值,该怎么写?谢谢。

马山杨梅 发表于:2012-09-28 16:55:16

直接在煮江品茶老师的SQL中+A呀

 

select *,dlast("B+C-D","阁下数据表名称","阁下的id字段名<" & 阁下的id字段名)+A as E
from 阁下数据表名称




沈军 发表于:2012-09-28 20:26:15
学习了

煮江品茶 发表于:2012-09-29 10:30:16

加上本条的E:

select *,dlast("B+C-D","阁下数据表名称","阁下的id字段名<" & 阁下的id字段名)+(B+C-D) as E
from 阁下数据表名称



煮江品茶 发表于:2012-09-29 16:58:02

用子查询也可写为:
select a.*,(select last(b.B+b.C-b.D) from tbname as b where b.id<a.id) + (a.B+a.C-a.D) as E from tbname as a

 

 

用ADO数据集可如下处理:
1、在标准模块中写一个一个函数:
Function getE(id As Long) As Single
    Dim rs As New ADODB.Recordset
    Dim ssql As String
    ssql = "select top 2 * from tbname where id<=" & id & " order by id"
    rs.Open ssql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    rs.MoveLast
    getE = rs!B.Value + rs!c.Value - rs!d.Value
    rs.MovePrevious
    If rs.BOF = False Then
        getE = E + rs!B.Value + rs!c.Value - rs!d.Value
    End If
    rs.Close: Set rs = Nothing
End Function

2、在查询中引用该函数:
select *,getE(id) as E from tbname



总记录:9篇  页次:1/1 9 1 :