sql语句双排序问题

--(4)查询学生成绩5-7名的学生学号、课程号、成绩
select sc.sno,cname,sc.grade
from sc,course
where sc.sno not in(select top 3*
from sc
where grade not in (select top 4 grade
from sc
order by grade DESC)
order by grade DESC
);
报错:消息 116,级别 16,状态 1,第 9 行
当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。

怎么就错了?

--首先你的错误是not in 括号里有多个字段 所以报错 楼下已经更正了
--其次你这样写,效率低,而且一眼看不太明白,影响可读性
--我给你一种写法 不一定是最好的 但比你的效果肯定好 不管是速度还是可读性
突然间发现你一个致命的错误 你的from后面跟的是两个表 但where后面没有写条件 我猜着写的 不对你再说
select sc.sno,cname,sc.grade from sc,course
where sc.sno =course.sno and sno in(select sno from (select sc.sno,row_number() over (order by grade desc) bz from sc) aa) bb
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-06
select sc.sno,cname,sc.grade
from sc,course
where sc.sno not in(select top 3 sc.sno from sc
where grade not in (select top 4 grade
from sc
order by grade DESC)
order by grade DESC
);

select top 3*改为
top 3 sc.sno
第2个回答  2013-05-06
这语句写得太恶心了...错误也很明显
from sc,course
where sc.sno not in(select top 3*
from sc
最后的select 你查询的是* ,但是前面的where条件是只有一个sc.sno的字段 ,这样的sql语句,数据大的话,你可以去睡一觉再来看查询结果了
第3个回答  2013-05-06
因为你top 3 *是不对的
你应该top3 sno
第4个回答  2013-05-06
order by 只能用于最外层

请教sql查询语句 双重排序的问题
(1)双重排序 select * from table order by date2,data1;(2)先分组再排序 select * from table group by data2,order by data1;

两个排序条件,怎么写sql语句
select table.a, table.b from table order by table.a, table.b 此句表示先按照a列排序,然后再按照b列排序 如果想控制升序降序 select table.a, table.b from table order by table.a ase, table.b desc 此句表示a列按照升序排列,b列按照降序排列 sql 语句是对数据库进行操作的一种语言。

sql语句双排序问题
--首先你的错误是not in 括号里有多个字段 所以报错 楼下已经更正了 --其次你这样写,效率低,而且一眼看不太明白,影响可读性 --我给你一种写法 不一定是最好的 但比你的效果肯定好 不管是速度还是可读性 突然间发现你一个致命的错误 你的from后面跟的是两个表 但where后面没有写条件 我猜...

sql按两字段排序
SQL语句用于数据库查询和管理,其中`ORDER BY`是用于排序结果集的关键字。当需要对数据进行多字段排序时,可以通过在`ORDER BY`后列出多个字段实现。例如:`SELECT * FROM tree ORDER BY a DESC, b DESC`。这条语句的含义是:从`tree`表中选择所有列,首先按照`a`字段降序排序,如果两条记录的`a...

一个Sql语句里能有两个排序(两个Order By)吗?
不可以。只能是 ORDER BY field1, field2 这样子的 但是可以这样 select from (select * from tab t1 order by field1) t2 order by field2.不过这样没有实际意义了

SQL语句:如何用两个条件排序
可以,比如你还想根据B字段来排序,可以这样写:select top 5 from table order by A ,B 如果不在A和B后写安什么排序,默认是升序asc 降序为desc 所以如果要安A、B降序排列则可以这样写:select top 5 from table order by A desc,B desc ...

sql 双重查询排序的问题,请高手解决!
下面是一种笨方法,就是分两次来查询。第一次先把state=2 和4的查询出来显示在前面,接着在后面继续查询。select * from stable where classid=5 and state=2 or state=4 order by time desc select * from stable where classid=5 and state<>2 or strte<>4 order by time desc ...

sql数据库双重排序
select ID,IType,Num from TableName A where not exists(select 1 from TableName where Itype = A.Itype and Num > A.NUm)

sql 排序的写法,按照两个条件去排序
ORDER BY 后可加2个字段,用英文逗号隔开。 1、f1用升序, f2降序,sql该这样写; ORDER BY f1, f2 DESC2、也可以这样写,更清楚; ORDER BY f1 ASC, f2 DESC3、如果都用降序,必须用两个desc;

order by 双排序问题
SELECT top 1 * From xxx order by grade ASC ,addtime desc 这个你写的语句 如果我没有看错,你的意思是想先按照grade排序,找出grade最大的当中时间最早或者最晚(因为这个我没看清你的意思)的那个记录。那么,既然你是只找一条,你又用了top关键字,order by grade ASC 注定你找不到对应的...

相似回答
大家正在搜