Access中一个SQL语句的实现,求助

猜我是几娃 2009-12-30 01:23:18
一张表,内容如下:所有项目均可重复
record A B C D E id
1 a b c d e 001
1 a b c d e 002
1 a b c d e 003
2 a b c d e 001
3 a b c d e 001
2 a b c d e 002
2 a b c d e 003
1 a b c d e 004
3 a b c d e 002
3 a b c d e 003
4 a b c d e 001
现在要实现的是:当查询条件是出现次数时,怎么查询出所有大于等于出现次数的项,并且结果为次数最大的那项。
比如当查询条件为 次数是2时,id为001的这项会出现4次,而现在需要只将最大的那项显示出来,即是次数为4的那项,其他也一样。
结果:
4 a b c d e 001
3 a b c d e 002
3 a b c d e 003

等高人指点。。。

数据库: Access 2003
...全文
46 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
猜我是几娃 2009-12-30
  • 打赏
  • 举报
回复
非常非常感谢!
wwwwb 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 buker19999 的回复:]
现在的情况是除了次数外,其他的所有项目都有可能是查询条件
[/Quote]
估计要用VBA动态生成SQL语句的方法
ACMAIN_CHM 2009-12-30
  • 打赏
  • 举报
回复
当查询条件为Record=2,A=k时,要得到这个结果
select a.*
from buker19999 a inner join (
select id,max(record) as m_record
from buker19999
where Record>=2 and A='k'
group by id
) b on a.id=b.id and a.record = b.m_record


当查询条件为Record=2,B=b时,要得到这个结果
select a.*
from buker19999 a inner join (
select id,max(record) as m_record
from buker19999
where Record>=2 and B='b'
group by id
) b on a.id=b.id and a.record = b.m_record
猜我是几娃 2009-12-30
  • 打赏
  • 举报
回复
举例:
record A B C D E id
1 a m c d e 001
1 k g c d e 002
1 l q c d e 003
2 a b c d e 001
3 a b c d e 001
2 k k c d e 002
2 r b c d e 003
1 k k c d e 004
3 a u c d e 002
3 l k c d e 003
4 k r c d e 001
当查询条件为Record=2,A=k时,要得到这个结果
4 k r c d e 001
2 k k c d e 002
当查询条件为Record=2,B=b时,要得到这个结果
3 a b c d e 001
2 r b c d e 003
ACMAIN_CHM 2009-12-30
  • 打赏
  • 举报
回复
猜一下则是

select a.*
from buker19999 a inner join (
select id, max(record) as m_record
from buker19999
where record>2 and a=b
group by id)
) b on a.id=b.id and a.record = b.=m_record
猜我是几娃 2009-12-30
  • 打赏
  • 举报
回复
现在的情况是除了次数外,其他的所有项目都有可能是查询条件
ACMAIN_CHM 2009-12-30
  • 打赏
  • 举报
回复
[Quote]我想把所有次数大于等于2,以及A这一项等于b 的记录都查询出来[/Quote]举例说明! (不要高估你的汉语表达能力或者我的汉语理解能力)
猜我是几娃 2009-12-30
  • 打赏
  • 举报
回复
呵呵~ 非常感谢啊。。。用了后面种方法,结果都出来了,这回长知识了~~
我一直弄得比较多的是算法这块,写函数的。。。SQL这块是菜鸟~~

我还有个问题哈,就是如果再加一个查询条件,这个条件写在哪里啊,比如,我想把所有次数大于等于2,以及A这一项等于b 的记录都查询出来,这个条件应该写在哪里?
针对后面个方法:
select a.*
from buker19999 a inner join (
select id, max(record) as m_record
from buker19999
where record>2
group by id)
) b on a.id=b.id and a.record = b.=m_record
ACMAIN_CHM 2009-12-30
  • 打赏
  • 举报
回复
或者


select a.*
from buker19999 a inner join (
select id, max(record) as m_record
from buker19999
where record>2
group by id)
) b on a.id=b.id and a.record = b.=m_record



以上两个语句均在ASP+ACCESS2003中可用。
ACMAIN_CHM 2009-12-30
  • 打赏
  • 举报
回复
select * from buker19999 t
where record>2
and not exists (
select 1 from buker19999
where id=t.id and record>t.record
)


并没有用到虚拟表,2003 中测试通过。

7,714

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧