水果店编号 水果种类 销售数量
1 苹果 1250
1 香蕉 1326
1 西瓜 236
1 西红柿 2365
1 草莓 3695
2 苹果 2250
2 香蕉 2326
2 西瓜 1364
2 西红柿 1365
2 草莓 2695
.
.
.
问题:
如何通过SQL语句,显示出每家水果店的前几行记录(比如显示前3行记录),应该如何实现呢?
实现后的效果如下:
水果店商店编号 水果种类 销售数量
1 苹果 1250
1 香蕉 1326
1 西瓜 236
2 苹果 2250
2 香蕉 2326
2 西瓜 1364
9 个解决方案
#1
SELECT *,RECNO() as bz FROM r:\temp\tth INTO CURSOR ttha
SELECT * FROM ttha a WHERE 3>(select COUNT(*) FROM ttha WHERE a.水果店编号=水果店编号 AND a.bz>bz)
SELECT * FROM ttha a WHERE 3>(select COUNT(*) FROM ttha WHERE a.水果店编号=水果店编号 AND a.bz>bz)
#2
兄弟可否解释一下,看不太懂呢
#3
是用VFP吧?
表中没有唯一标识的字段,用
RECNO() 生成,再取前3条记录
SELECT a.水果店编号,a.水果种类,a.bz,count(*) FROM ttha a
left join ttha b on
a.水果店编号=b.水果店编号 AND a.bz>b.bz
group by a.水果店编号,a.水果种类,a.bz
看看结果就知道了
表中没有唯一标识的字段,用
RECNO() 生成,再取前3条记录
SELECT a.水果店编号,a.水果种类,a.bz,count(*) FROM ttha a
left join ttha b on
a.水果店编号=b.水果店编号 AND a.bz>b.bz
group by a.水果店编号,a.水果种类,a.bz
看看结果就知道了
#4
我没有用过VFP,就是想求一条能够支持DBF数据表操作的SQL语句,因为在现成的软件里有一个能支持SQL语句的查询的窗口,上面提到的DBF表是从oracle数据库里自动生成出来的。
#5
你发了4个帖子问这个问题,加入自增字段ID
vfp9:
加入自增字段ID
ALTER table ttt ADD id i AUTOINC
SELECT * FROM tth a WHERE 3>(select COUNT(*) FROM tth WHERE a.水果店编号=水果店编号 AND a.id>id)
否则在DBF中加入唯一标识的字段
vfp9:
加入自增字段ID
ALTER table ttt ADD id i AUTOINC
SELECT * FROM tth a WHERE 3>(select COUNT(*) FROM tth WHERE a.水果店编号=水果店编号 AND a.id>id)
否则在DBF中加入唯一标识的字段
#6
如果销售数量唯一
SELECT * FROM tth a WHERE 3>(select COUNT(*) FROM tth WHERE a.水果店编号=水果店编号 AND a.销售数量>销售数量)
SELECT * FROM tth a WHERE 3>(select COUNT(*) FROM tth WHERE a.水果店编号=水果店编号 AND a.销售数量>销售数量)
#7
表里好像没有唯一的值,在不要改变表整体结构的情况下 有办法实现吗?因为表的结构我没有权限改变。我只能通过SQL语句来实现。需要支持ACCESS数据库操作的SQL语句
麻烦了。。。
#8
你这里前三行是什么意思呢?记录产生的先后顺序?销售数量的多少?
如果是记录产生时的顺序,那么你必须给记录增加一个时间属性、或者序号。SQL是基于集合的操作,和记录的实际存储位置无关、和记录存入的先后顺序无关,它不会自动考虑记录产生的时间、位置问题。
如果是销售数量,那么先排一下序。现在的SQL工具,一般都支持按排序取前若干位或若干百分比,VFP在这方面还属于行动比较早的,查VFP关于SQL Select的说明吧。
#9
将wwwwb的改了一下,能够达到楼主的要求了——每个店销量前3名的列出:
SELECT *,RECNO() as bz FROM r:\temp\tth INTO CURSOR ttha ReadWrite Order By 水果店编号,销售数量 Desc &&增加 ReadWrite Order By 水果店编号,销售数量 Desc
BROWSE
Update ttha Set bz=Recno() && 增加这句
SELECT 水果店编号,水果种类,销售数量 FROM ttha a WHERE 3>(select COUNT(*) FROM ttha WHERE a.水果店编号=水果店编号 AND a.bz>bz)
SELECT *,RECNO() as bz FROM r:\temp\tth INTO CURSOR ttha ReadWrite Order By 水果店编号,销售数量 Desc &&增加 ReadWrite Order By 水果店编号,销售数量 Desc
BROWSE
Update ttha Set bz=Recno() && 增加这句
SELECT 水果店编号,水果种类,销售数量 FROM ttha a WHERE 3>(select COUNT(*) FROM ttha WHERE a.水果店编号=水果店编号 AND a.bz>bz)
#1
SELECT *,RECNO() as bz FROM r:\temp\tth INTO CURSOR ttha
SELECT * FROM ttha a WHERE 3>(select COUNT(*) FROM ttha WHERE a.水果店编号=水果店编号 AND a.bz>bz)
SELECT * FROM ttha a WHERE 3>(select COUNT(*) FROM ttha WHERE a.水果店编号=水果店编号 AND a.bz>bz)
#2
兄弟可否解释一下,看不太懂呢
#3
是用VFP吧?
表中没有唯一标识的字段,用
RECNO() 生成,再取前3条记录
SELECT a.水果店编号,a.水果种类,a.bz,count(*) FROM ttha a
left join ttha b on
a.水果店编号=b.水果店编号 AND a.bz>b.bz
group by a.水果店编号,a.水果种类,a.bz
看看结果就知道了
表中没有唯一标识的字段,用
RECNO() 生成,再取前3条记录
SELECT a.水果店编号,a.水果种类,a.bz,count(*) FROM ttha a
left join ttha b on
a.水果店编号=b.水果店编号 AND a.bz>b.bz
group by a.水果店编号,a.水果种类,a.bz
看看结果就知道了
#4
我没有用过VFP,就是想求一条能够支持DBF数据表操作的SQL语句,因为在现成的软件里有一个能支持SQL语句的查询的窗口,上面提到的DBF表是从oracle数据库里自动生成出来的。
#5
你发了4个帖子问这个问题,加入自增字段ID
vfp9:
加入自增字段ID
ALTER table ttt ADD id i AUTOINC
SELECT * FROM tth a WHERE 3>(select COUNT(*) FROM tth WHERE a.水果店编号=水果店编号 AND a.id>id)
否则在DBF中加入唯一标识的字段
vfp9:
加入自增字段ID
ALTER table ttt ADD id i AUTOINC
SELECT * FROM tth a WHERE 3>(select COUNT(*) FROM tth WHERE a.水果店编号=水果店编号 AND a.id>id)
否则在DBF中加入唯一标识的字段
#6
如果销售数量唯一
SELECT * FROM tth a WHERE 3>(select COUNT(*) FROM tth WHERE a.水果店编号=水果店编号 AND a.销售数量>销售数量)
SELECT * FROM tth a WHERE 3>(select COUNT(*) FROM tth WHERE a.水果店编号=水果店编号 AND a.销售数量>销售数量)
#7
表里好像没有唯一的值,在不要改变表整体结构的情况下 有办法实现吗?因为表的结构我没有权限改变。我只能通过SQL语句来实现。需要支持ACCESS数据库操作的SQL语句
麻烦了。。。
#8
你这里前三行是什么意思呢?记录产生的先后顺序?销售数量的多少?
如果是记录产生时的顺序,那么你必须给记录增加一个时间属性、或者序号。SQL是基于集合的操作,和记录的实际存储位置无关、和记录存入的先后顺序无关,它不会自动考虑记录产生的时间、位置问题。
如果是销售数量,那么先排一下序。现在的SQL工具,一般都支持按排序取前若干位或若干百分比,VFP在这方面还属于行动比较早的,查VFP关于SQL Select的说明吧。
#9
将wwwwb的改了一下,能够达到楼主的要求了——每个店销量前3名的列出:
SELECT *,RECNO() as bz FROM r:\temp\tth INTO CURSOR ttha ReadWrite Order By 水果店编号,销售数量 Desc &&增加 ReadWrite Order By 水果店编号,销售数量 Desc
BROWSE
Update ttha Set bz=Recno() && 增加这句
SELECT 水果店编号,水果种类,销售数量 FROM ttha a WHERE 3>(select COUNT(*) FROM ttha WHERE a.水果店编号=水果店编号 AND a.bz>bz)
SELECT *,RECNO() as bz FROM r:\temp\tth INTO CURSOR ttha ReadWrite Order By 水果店编号,销售数量 Desc &&增加 ReadWrite Order By 水果店编号,销售数量 Desc
BROWSE
Update ttha Set bz=Recno() && 增加这句
SELECT 水果店编号,水果种类,销售数量 FROM ttha a WHERE 3>(select COUNT(*) FROM ttha WHERE a.水果店编号=水果店编号 AND a.bz>bz)