就是一个图遍历的算法嘛。我以前写过类似的找最短路径的SQL,写游标遍历和写循环都可以实现在此建议你好好想几天自己写,写出来之后你的算法和SQL会有一个质的飞跃~~~~
解决方案 »
- ORACLE有没有与SQL SERVER的查询分析器一样的工具?
- 如何通过IP地址,不需要配置链接,就能访问远程oracle实例
- 我用Oracle SQL Developer 进行查询,里面中文字段显示的全是乱码,但我已经将环境配置的编码设成gb3212了?
- rman小问题
- 急用!如何读取表中clob类型的字段?
- 散分:请问oracle中怎么设table description和field description? 在线等待,谢谢
- 创建记录类型出错急救
- ASP用oo4o连ORCALE不上,为什么?
- 讨论:买的oracle和从网上下载的oracle有什么不同?
- 怎么查询 ORACLE 用户最后一次登录的时间。
- 这样一个左连接PL/SQL语句该怎么写?
- 一个奇怪的查询速度问题
--------->
select a.车型 as 车型,
(case when ... then
...
case when ... then
...
end ) AS 线路, b.票价 as 票价
from
(select 车型 ,count(*) from 表 group by 车型) a,
表 b
where
a.车型=b.车型
车型 起始站 终点站 票价
依维柯 A E 200
依维柯 E A 200
依维柯 C E 90
依维柯 E C 90
依维柯 A C 80
依维柯 C A 80这样的话,从C到A可以C-A,也可以C-E-A,这算不算迂回?
表中不存在返程记录。
谢谢各位的回复!!
你的这种办法好像有点行不通,无法得到结果。
substr(sys_connect_by_path(起始站,'-'),2,length(sys_connect_by_path(起始站,'-'))) || '-' || 终点站 线路,
substr(sys_connect_by_path(票价,'+'),2,length(sys_connect_by_path(票价,'+'))) 票价 from
表
where
终点站=E connect by prior 终点站=起始粘 start with 起始粘=A;
-------------------- -------------------- -------------------- ----------
依维柯 A E 200
依维柯 A D 180
依维柯 A B 70
依维柯 B E 120
依维柯 A C 80
沃尔沃 A E 260
沃尔沃 A B 60
沃尔沃 B E 180
依维柯 B C 60
依维柯 C E 90
依维柯 C D 5011 rows selectedSQL> SELECT TYPES,
2 SUBSTR(SYS_CONNECT_BY_PATH(STARTS, '-') || '-' || GOALS, 2) ROUTE,
3 SUBSTR(SYS_CONNECT_BY_PATH(FARE, '+'), 2) FARE
4 FROM t
5 WHERE GOALS = 'E'
6 START WITH STARTS = 'A'
7 CONNECT BY STARTS = PRIOR GOALS
8 AND TYPES = PRIOR TYPES
9 /TYPES ROUTE FARE
-------------------- -------------------- --------------------
沃尔沃 A-E 260
沃尔沃 A-B-E 60+180
依维柯 A-E 200
依维柯 A-B-E 70+120
依维柯 A-B-C-E 70+60+90
依维柯 A-C-E 80+906 rows selected
主要还是SYS_CONNECT_BY_PATH以及connect by start with的用法的展现!