如何利用SQL语句返回表中每个分类的指定行记录呢?苦想好几天还是解决不了,求高人帮忙!!!

latola 2013-01-02 03:17:46
假如有一个表,如下图所示,用 select * from [表] 在电子屏幕上显示如下信息:

水果店编号 水果种类 销售数量 备注
1 苹果 2250
1 香蕉 1326
1 西瓜 2136
1 西红柿 2365
1 草莓 3695
2 苹果 2250
2 香蕉 2366
2 西瓜 1365
2 西红柿 1365
2 草莓 3695

问题:
如何通过SQL语句,在不改变表结构的前提下(我没有权限改变表的结构),实现每家水果店只能显示出固定的数量信息,比如有些水果店本来有50条记录,或者有30条记录,也只能显示出我给定的记录数量,比如每家水果店只能显示10条记录信息,或者更少),应该如何实现呢?苦想好几天还是解决不了,求高人帮忙!!!

实现后的效果如下,这是每家水果店只能显示出三条关于该水果店的信息记录

水果店编号 水果种类 销售数量 备注
1 苹果 1260
1 香蕉 1326
1 西瓜 2136
2 苹果 2250
2 香蕉 2366
2 西瓜 1365
...全文
362 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
EH_wuxiang_123 2013-01-15
  • 打赏
  • 举报
回复
引用 10 楼 WWWWA 的回复:
你不加唯一标识的字段ID,没有,记录在数据库中没有顺序,而你又要取物理顺序(前3、10条)记录
可用TOP解决顺序问题。

SELECT * FROM 表 A WHERE 水果种类 IN (SELECT TOP 3 水果种类 FROM 表 B WHERE A.水果店编号=B.水果店编号)
TOP不接ORDER BY子句时,按数据源记录位置取指定条数,不管记录是否会重复,如取前三条,即使第四条和第三条一样,第四条也不被返回,但若接ORDER BY子句,则第四条也被返回。 若只希望返回每间店任意3条记录,不用按数据源记录的位置进行提取,那方法就更多了,而且也比TOP要高效得多。
WWWWA 2013-01-07
  • 打赏
  • 举报
回复
你不加唯一标识的字段ID,没有,记录在数据库中没有顺序,而你又要取物理顺序(前3、10条)记录
ACMAIN_CHM 2013-01-03
  • 打赏
  • 举报
回复
引用 6 楼 latola 的回复:
引用 5 楼 ACMAIN_CHM 的回复:如果没有字段,或者字段组合可以用于排序,则没有办法。 那如果有字段可以进行排序的话,应该要怎么写呢?麻烦版主了
猜不出用哪个字段排序。 这个需要花点时间来猜谜。
latola 2013-01-03
  • 打赏
  • 举报
回复
引用 7 楼 ACMAIN_CHM 的回复:
引用 4 楼 ACMAIN_CHM 的回复:参考下贴中的多种方法 http://blog.csdn.net/acmain_chm/article/details/4126306 [征集]分组取最大N条记录方法征集,及散分....已经回复你一次了,似乎你根本不愿意看啊。
这个已经看过,只是水平太菜一下子理解不了,想请版主能不能直接帮我详细的写出来呢
ACMAIN_CHM 2013-01-02
  • 打赏
  • 举报
回复
引用 4 楼 ACMAIN_CHM 的回复:
参考下贴中的多种方法 http://blog.csdn.net/acmain_chm/article/details/4126306 [征集]分组取最大N条记录方法征集,及散分....
已经回复你一次了,似乎你根本不愿意看啊。
latola 2013-01-02
  • 打赏
  • 举报
回复
引用 5 楼 ACMAIN_CHM 的回复:
如果没有字段,或者字段组合可以用于排序,则没有办法。
那如果有字段可以进行排序的话,应该要怎么写呢?麻烦版主了
ACMAIN_CHM 2013-01-02
  • 打赏
  • 举报
回复
如果没有字段,或者字段组合可以用于排序,则没有办法。
latola 2013-01-02
  • 打赏
  • 举报
回复
引用 2 楼 ACMAIN_CHM 的回复:
如果原记录中没有任何字段或者字段组合可以用于排序,则建议还是在程序中来通过代码实现。 程序中你可以先 select distinct 水果店编号 from 假如有一个表 得到所有店, 然后在循环从表中 select top 3 from 假如有一个表 where 水果店编号= xx
你好,如果直接用SQL语句没法实现吗?
ACMAIN_CHM 2013-01-02
  • 打赏
  • 举报
回复
如果同一店下,水平名称不重复,则可以使用。 select * from 假如有一个表 t where 3>(select count(*) from 假如有一个表 where 水果店编号=t.水果店编号 and 水果种类<t.水果种类)
ACMAIN_CHM 2013-01-02
  • 打赏
  • 举报
回复
如果原记录中没有任何字段或者字段组合可以用于排序,则建议还是在程序中来通过代码实现。 程序中你可以先 select distinct 水果店编号 from 假如有一个表 得到所有店, 然后在循环从表中 select top 3 from 假如有一个表 where 水果店编号= xx
latola 2013-01-02
  • 打赏
  • 举报
回复
表中没有唯一值的字段

7,714

社区成员

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

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