作业帮 > 综合 > 作业

请教下如何编写如下sql语句

来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/12 02:06:26
请教下如何编写如下sql语句
我有这样的一张表,grade的优先级为:2 > 4 > 1 > 8
PassengerID PassengerName OrderID Grade
1\x05 \x05张三\x05 1 \x05\x051
2 李四\x05 \x051\x05 \x052
3\x05 \x05王五\x05 \x051\x05 \x054
4 \x05\x05李明\x05 \x052 1
5\x05 小三\x05 \x052 \x05\x058
6\x05 \x05小蝌蚪\x05 3\x05 \x054
7\x05 \x05青蛙\x05 3\x05 \x051
现在只需要取同一个OrderID中优先级最大的那一条,最后的效果为:
PassengerID PassengerName OrderID Grade
2 李四\x05 \x051\x05 \x052
4 \x05 李明\x05 \x052 1
6\x05 \x05小蝌蚪\x05 3\x05 \x054
如果不使用游标的情况,该sql如何写.
请教下如何编写如下sql语句
数据及表create table test
(passengerid int,
passengername varchar(10),
orderid int,
grade int)

insert into test values (1,'张三',1,1)
insert into test values (2,'李四',1,2)
insert into test values (3,'王五',1,4)
insert into test values (4,'李明',2,1)
insert into test values (5,'小三',2,8)
insert into test values (6,'小蝌蚪',3,4)
insert into test values (7,'青蛙',3,1) 运行 select passengerid,passengername,orderid,grade
from
(select *,
row_number() over (partition by orderid order by case when grade=2 then 0  
when grade=4 then 1 when grade=1 then 2 when grade=8 then 3 else 4 end) rn from test) t
where rn=1 结果 说明:oracle10g以上或sqlserver2005以上版本适用,其他数据库另说,表名我起的test,自行更换一下