复杂查询中限制SQL SERVER返回的记录数

jco 2000-04-06 07:22:00
有查询
select * from Sales where (saleArea="beijing" or saleArea="shanghai") and saleAmount>1000 order by saleAmount
如只想让beijing和shanghai的纪录个出现5个(saleAmount最小的5个)
该怎样写?
请教各位大侠
...全文
357 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanghuan 2000-04-11
  • 打赏
  • 举报
回复
对不起
少写一个与case 配对的end
tanghuan 2000-04-11
  • 打赏
  • 举报
回复
如果你只有两个明确的销售地区需要查询,929的方法是最优的

如果有不确定多个销售地区需要查询
就可以采用先序列化后对序列排除即可

假如你的销售地区在 SaleAreaTable表中存放

create table #temp(RowNum int identify,Sales表的列)
insert into #temp /*对数据序列化*/
select Sales.*
from Sales ,SaleAreaTable
where Sales.SaleArea=SaleAreaTable.SaleArea and
Sales.aleAmount>1000
order by Sales.saleAmount

select a.需要输出的列
from (
select a2.*,(case /*确定是本地区的前5名*/
when count(*)<=5 then 1
else 0
)"IsOutput"
from #temp a1,#temp a2
where a1.RowNum<=a2.RowNum and /*此处必须是<=,否则会漏掉行*/
a1.SaleArea=a2.SaleArea
group by a2.SaleArea

) a
where IsOutput=1
drop table #temp
jco 2000-04-07
  • 打赏
  • 举报
回复
用ADO全部查出,然后显示时把不需要的滤掉快,还是按929的说法快
telan 2000-04-07
  • 打赏
  • 举报
回复
实质上是不同的两个条件,当然要查两遍,你还想
怎样?
929 2000-04-07
  • 打赏
  • 举报
回复
select top 5 * from sales where salearea="beijing" and saleamount>1000
union
select top 5 * from sales where salearea="shanghai" and saleamount>1000
order by saleamount
qiuzhi 2000-04-07
  • 打赏
  • 举报
回复
用:
set rowcount n
-- 返回前面n条记录

....查询语句

set rowcount 0 -- 参数复位
hao_yl 2000-04-07
  • 打赏
  • 举报
回复
zdg说对了
jco 2000-04-07
  • 打赏
  • 举报
回复
929的回答可以实现
但这样要查询表两遍,速度很慢.
请教有无更好的实现方法
jco 2000-04-06
  • 打赏
  • 举报
回复
说明一下是
saleArea="beijing" 的出现5个
saleArea="shanghai的出现5个
拜托!拜托!
zdg 2000-04-06
  • 打赏
  • 举报
回复
select top 5 * from Sales where (saleArea="beijing" or saleArea="shanghai") and saleAmount>1000 order by saleAmount

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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