请教下如何编写如下sql语句
请教下如何编写如下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如何写.
最佳回答
数据及表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,自行更换一下
(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,自行更换一下
热门文章
- 康达学院专转本五年制
- 高考一个考场分ab卷吗
- not only but also用法
- 某物体做自由落体运动,从释放开始计时,则物体在前2s内的平均速度为______m/s,物体下落2m时的速度大小为______m/s.
- 三角函数公式大全表格
- 地理中考必背知识点2022
- 2013-2014学年小学六年级科学上学期期末考试试卷及答案
- 人教版2014-2015学年小学五年级英语第二学期期中教学质量检测试卷及答案
- 【Linux驱动开发】设备树详解(二)设备树语法详解
- 别跟客户扯细节
- 在别的城市买房子能落户吗
- 卖房前要把装修贷还完吗
- 高中政治教学提高教学效果的方法探究
- “互联网+”背景下的初中英语课堂教学改革与创新策略研究
- 2022年终止合同范本
- 租房合同范本范文
- 如何挑选土豆
- 如何挑选土鸡
