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

学习 时间:2026-04-02 09:30:12 阅读:3471
请教下如何编写如下sql语句我有这样的一张表,grade的优先级为:2 > 4 > 1 > 8PassengerID PassengerName OrderID Grade1\x05 \x05张三\x05 1 \x05\x0512 李四\x05 \x051\x05 \x0523\x05 \x05王五\x05 \x051\x05 \x0544 \x05\x05李明\x05 \x052 15\x05 小三\x05 \x052 \x05\x0586\x05 \x05小蝌蚪\x05 3\x05 \x0547\x05 \x05青蛙\x05 3\x05 \x051现在只需要取同一个OrderID中优先级最大的那一条,最后的效果为:PassengerID PassengerName OrderID Grade2 李四\x05 \x051\x05 \x0524 \x05 李明\x05 \x052 16\x05 \x05小蝌蚪\x05 3\x05 \x054如果不使用游标的情况,该sql如何写.

最佳回答

斯文的玫瑰

聪慧的大树

2026-04-02 09:30:12

数据及表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,自行更换一下

最新回答共有2条回答

  • 等待的小白菜
    回复
    2026-04-02 09:30:12

    数据及表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,gradefrom(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) twhere rn=1 结果 说明:oracle10g以上或sqlserver2005以上版本适用,其他数据库另说,表名我起的test,自行更换一下

上一篇 初中的英文怎么读?ok,告诉我!

下一篇 防潮垫可以铺在床上吗