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高手指点,如有不明白请继续追问,谢谢! 展开
表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高手指点,如有不明白请继续追问,谢谢! 展开
4个回答
展开全部
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.分数
查询结果
更多追问追答
追问
非常感谢,效果不错,计算稍微有点慢;
能否帮忙再添加几项要求:
表2的名额可能是2.5或2.8等四舍五入,
目前是2.8还是按2个来计算,能不能按3来计算,
如果太复杂就算了------
表2我想再添加一列内容,和A,B,C对应的行,比如: (如果影响计算速度就算了)
数量
500
400
200
再帮忙把 得来的查询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
展开全部
分数最大前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 分数
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 分数
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
只要sql 语言吗?
SELECT TOP 5 * FROM 表单 by
SELECT TOP 5 * FROM 表单 by
更多追问追答
追问
SQL或其它的都可以,只要能行的通就行。可表2内容是会有变化的呀,
追答
你会简单的语言吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-11-22
展开全部
sql语句写的,图给你看一下,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |