Access查询表中根据条件选取内容?

access的查询中有两个表:(表1、表2),表内容如下:表1:姓名分数张三33李四30王二25陈木25胡某10豪某8.................很多表2:等级名额... access的查询中有两个表:(表1、表2),表内容如下:
表1:
姓名 分数
张三 33
李四 30
王二 25
陈木 25
胡某 10
豪某 8
.................很多
表2:
等级 名额
A 5
B 4
C 2

我想得出的结果是:
分数最大前5名 评分等级为A
除去5名后分数前4名为B等级
除去5和4后剩余前2名为C等级, 剩余的所有人为D
如果实在做不到可以分成3个表也可以,A等级一个表、B等级一个表、C等级一个表。

希望ACCESS高手指点,如有不明白请继续追问,谢谢!
展开
 我来答
badkano
2013-11-21 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144776 获赞数:885373
团长

向TA提问 私信TA
展开全部

sql语句写的,图给你看一下,名额我没弄那么多,数据也没弄那么多

表1

 

表2

 

新建查询,sql视图

select s1.姓名,s1.分数,min(switch(s1.名次<=s2.名次,s2.等级,true,'D')) as 等级
from
(select 姓名,分数,(select count(*) from 表1 as b where  b.分数>a.分数)+1 as 名次 from 表1 as a) s1,
(select t1.等级,sum(t2.名额) as 名次
from
(select 等级,名额,(select count(*) from 表2 as b where  b.等级>a.等级)+1 as 名次 from 表2 as a) t1
left join 
(select 等级,名额,(select count(*) from 表2 as b where  b.等级>a.等级)+1 as 名次 from 表2 as a) t2
on t1.名次<=t2.名次
group by t1.等级,t1.名额) s2
group by s1.姓名,s1.分数

查询结果

更多追问追答
追问

非常感谢,效果不错,计算稍微有点慢;

能否帮忙再添加几项要求:

  1. 表2的名额可能是2.5或2.8等四舍五入,

    目前是2.8还是按2个来计算,能不能按3来计算,

    如果太复杂就算了------

  2. 表2我想再添加一列内容,和A,B,C对应的行,比如:  (如果影响计算速度就算了)

     数量

     500

     400

     200

  3. 再帮忙把 得来的查询1表按 分数或等级排序一下;

 

学习了,,完成必送满分感谢!

追答

问题1,用一下round函数,但是access里恶心的一点是,起的别名不能与原来字段名一致

这样

select s1.姓名,s1.分数,min(switch(s1.名次<=s2.名次,s2.等级,true,'D')) as 等级 
from 
(select 姓名,分数,(select count(*) from 表1 as b where  b.分数>a.分数)+1 as 名次 from 表1 as a) s1, 
(select t1.等级,sum(t2.数量) as 名次 
from 
(select 等级,round(名额) as 数量,(select count(*) from 表2 as b where  b.等级>a.等级)+1 as 名次 from 表2 as a) t1 
left join  
(select 等级,round(名额) as 数量,(select count(*) from 表2 as b where  b.等级>a.等级)+1 as 名次 from 表2 as a) t2 
on t1.名次<=t2.名次 
group by t1.等级,t1.数量) s2 
group by s1.姓名,s1.分数

问题2,名额和数量的意思难道不是一样吗?

 

问题3

结尾处加一句

order by s1.分数 desc
FM网络
2013-11-21 · TA获得超过825个赞
知道小有建树答主
回答量:1130
采纳率:0%
帮助的人:972万
展开全部
分数最大前5名 评分等级为A:
SELECT TOP 5 姓名, 分数, "A" as 评分等级 FROM 表单 order by 分数 desc

除去5名后分数前4名为B等级:
先做个中间查询:表单查询B
SELECT TOP 9 姓名, 分数 FROM 表单 order by 分数 desc
然后出来结果:
SELECT TOP 4 姓名, 分数, "B" as 评分等级 FROM 表单查询B order by 分数

除去5和4后剩余前2名为C等级, 剩余的所有人为D

先做个中间查询:表单查询C
SELECT TOP 11 姓名, 分数 FROM 表单 order by 分数 desc
然后出来结果:
SELECT TOP 4 姓名, 分数, "C" as 评分等级 FROM 表单查询C order by 分数

其余为D:
SELECT 姓名, 分数, "D" as 评分等级 FROM 表单 order by 分数
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沉鱼落雁39
2013-11-21 · 超过32用户采纳过TA的回答
知道答主
回答量:143
采纳率:0%
帮助的人:67.2万
展开全部
只要sql 语言吗?
SELECT TOP 5 * FROM 表单 by
更多追问追答
追问
SQL或其它的都可以,只要能行的通就行。可表2内容是会有变化的呀,
追答
你会简单的语言吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-22
展开全部
sql语句写的,图给你看一下,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式