这个SQL该怎么写呢?
我的表如:
编号 型号 类别 价格
001 a1 电脑 5000
002 b2 彩电 4000
003 a3 电脑 6000
004 b1 彩电 5000
005 a2 电脑 4000
006 b3 彩电 6000
.........
我需要显示前(后)X条记录(是根据价格排序后的)的表:(X是变化的,类别也是变化的,即作为参数)
比如选电脑的前2条:
编号 型号 电脑
003 b1 6000
002 b2 5000
再如选彩电的后2条:
编号 型号 彩电
004 a3 6000
001 a1 5000
怎么写呢?
问题点数:0、回复次数:4Top
1 楼631799(杭州工人)回复于 2005-04-03 18:25:14 得分 0
--取每种类别的前2条
select * from tb a where (select count(1) from tb where 类别=a.类别 and 价格>a.价格)<=2
--如果要显示具体的类别就:
select * from tb a where (select count(1) from tb where 类别=电脑 and 价格>a.价格)<=2
select * from tb a where (select count(1) from tb where 类别=彩电 and 价格>a.价格)<=2
Top
2 楼skeeterLa(英俊的大米虫)回复于 2005-04-03 18:35:31 得分 0
dim recN as new adodb.recordset
dim X as int
dim sqlX as string
'---后几条
sqlx="select top " & "& x &" & " * from 表 order by 单价 desc"
recn.open sqlx,cndata
recN.close
set recN=nothing
'--前几条
sqlx="select top "& "& x &" & " * from 表 order by 单价 "
recn.open sqlx,cndata
recN.close
set recN=nothing
这是VB中的写法。
存储过程中可以写
CREATE PROCEDURE [dbo].[sqlGet]
@X int, --行数
@tag ---后面、还是前面
AS
-------在返回指定的行数之后停止处理查询
SET ROWCOUNT @x
if @tag='前'
begin
select * from 表 order by 单价
end
else
if @tag='后'
begin
select * from 表 order by 单价 desc
end
Top
3 楼skeeterLa(英俊的大米虫)回复于 2005-04-03 18:37:30 得分 0
存储过程中可以写
CREATE PROCEDURE [dbo].[sqlGet]
@X int, --行数
@Lb nvarchar(4),--类型
@tag ---后面、还是前面
AS
-------在返回指定的行数之后停止处理查询
SET ROWCOUNT @x
if @tag='前'
begin
select * from 表 where 类型=@lb order by 单价
end
else
if @tag='后'
begin
select * from 表 类型=@lb order by 单价 desc
end
主要是:SET ROWCOUNT @x 这个用法Top
4 楼ziping(子平)回复于 2005-04-04 16:41:53 得分 0
select top X * from t
select top X * from t order by y descTop




