access数据库仅使用查询如何实现这种效果(100分)

  • 主题发起人 主题发起人 美国提子
  • 开始时间 开始时间

美国提子

Unregistered / Unconfirmed
GUEST, unregistred user!
表a
编号 金额 状态
sp001 100 有效
sp002 20 有效
sp003 50 无效
sp004 50 有效
sp005 30 有效
sp006 10 有效

用sql如何得出下面得结果
起始编号 结束编号 金额 状态
sp001 sp002 120 有效
sp003 sp003 50 无效
sp004 sp006 90 有效
 
为什么是sp001和sp002算在一起,根据什么进行分类的?
 
首先,编号肯定是顺序排下来的。分类是根据〔状态〕分的。
 
要不做一个临时表来处理。
 
鳄鱼先生
如何处理?能具体点么,关键是只能access得用视图实现
 
临时表或原表增加两个字段
编号 金额 状态 状态ID 序号
sp001 100 有效 1 1
sp002 20 有效 1 2
sp003 50 无效 2 3
sp004 50 有效 3 4
sp005 30 有效 3 5
sp006 10 有效 3 6

关键是状态ID,需要生成的时候,
nID := 1;
从第一条记录开始,记录的状态每次改变,nID增加1。
然后使用SQL查询:
Select First(编号) as 起始编号, Last(编号) as 结束编号, Sum(金额) as 合计金额, First(状态)
from a
group by 状态ID
order by First(编号)
 
嗯,加二个字段是可以实现,好像也没有其他好办法了
 
按有效和无效分吗
 
更改表结构吧! 没什么好办法,直接增加一分组字段 “组”。
 
状态id不太好加啊,楼主决定怎么处理?
 
还在考虑中,加字段可能不允许,不行看看能不能改需求了
 
加不加字段是次要的,不加的话,通过查询也也可以生成那个字段
关键是你怎么计算哪些值的?
 
现在关键是在查询中不可能或者说我不知道像sqlserver那样去遍历表,要不然的话就容易处理了。像xiammy说的也是需要遍历表的或者在添加的时候就确定状态id的值
 
SELECT B.编号, (select max(编号) from t1 where 编号>=B.编号 and 状态=B.状态 and 编号<(select min(编号) from t1 where 编号>B.编号 and 状态<>B.状态)) AS 表达式1, B.状态
FROM t1 AS B;

我的思路就走到这了,剩下的就看你了.呵呵
t1就是你的那个表.
 
歪招,仅适用你这样的表,这样的记录格式:

0、字段bh,jg,flag对应你的:编号,金额,状态

1、最后一条记录是“无效”的;

2、写个查询:QView1
select * from 表1 where flag='无效'

3、执行:
select first(b.bh) as StartBH,last(b.bh) as EndBH,sum(b.jg) as jg,b.Flagbh from
(select a.bh,a.jg,first(a.tbh) as Flagbh from
(SELECT 表1.bh,表1.jg,表1.flag,QView1.bh as tbh,QView1.flag as tflag
FROM 表1, QView1 where 表1.flag > QView1.flag and 表1.bh<QView1.bh )a
group by a.bh,a.jg)b
group by b.Flagbh

4、俺你的上面表记录的格式不差的填写才查的正确,^_^

5、已经测试通过啦
 
[:D],楼上的只能得出有效的记录,不过思路差不多,哈哈,快搞定了
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
574
import
I
后退
顶部