小弟现在正在做一个公交公司的项目,有一个模块是公交线路查询的,其中涉及到公交换乘,客户给了2个视图,一个是站点视图(存放所有的站点信息,yy_line_station_view),一个是线路信息(存放所有的线路,yy_line_view),视图是他们原来就有的,不能做任何字段的修改,
下面这条语句是查询2路车所经过的站点:
select s.* from yy_line_station_view s,yy_line_view l where s.LINE_ID=l.GIS_LINE_ID and l.LINE_NAME='2路' and up_or_down=0 order by sort_no asc;
其中两个视图是经过GIS_LINE_ID (是线路内码)和LINE_ID(站点视图中的线路ID,为内部编号)关联的,LINE_NAME是公交车线路名称,up_or_down=0(是上行还是下行0=上行,1=下行),sort_no是站点顺序,
下面这条语句是查询火车站这个站点所经过的线路信息:
select s.* from yy_line_station_view s where line_id in (select s.line_id from yy_line_station_view s where station_name like '%火车站%') and up_or_down=0 order by line_id asc;
这条语句可以查询出所有经过火车站的线路信息
比如说“2路”经过A,B,C,D四个站点,
比如说第2条语句查询出3路和5路经过火车站,其中“3路经过,K,Y,L,U”4个站点,“5路经过”,E,Q,C,G四个站点,从信息可以看出3路没有和2路有交叉的站点,所以不能换乘,5路和2路都经过C站点,代表可以换成,怎么用一条SQL语句或过程查询出有重合站点的车辆信息,就像上面语句中2路和5路有C站点重合,就把2路和5路的信息查询出来,显示在页面上,望那位大虾帮一下小弟,(可以把上面2条语句整合一下,或者写个过程等)不胜感激。
下面这条语句是查询2路车所经过的站点:
select s.* from yy_line_station_view s,yy_line_view l where s.LINE_ID=l.GIS_LINE_ID and l.LINE_NAME='2路' and up_or_down=0 order by sort_no asc;
其中两个视图是经过GIS_LINE_ID (是线路内码)和LINE_ID(站点视图中的线路ID,为内部编号)关联的,LINE_NAME是公交车线路名称,up_or_down=0(是上行还是下行0=上行,1=下行),sort_no是站点顺序,
下面这条语句是查询火车站这个站点所经过的线路信息:
select s.* from yy_line_station_view s where line_id in (select s.line_id from yy_line_station_view s where station_name like '%火车站%') and up_or_down=0 order by line_id asc;
这条语句可以查询出所有经过火车站的线路信息
比如说“2路”经过A,B,C,D四个站点,
比如说第2条语句查询出3路和5路经过火车站,其中“3路经过,K,Y,L,U”4个站点,“5路经过”,E,Q,C,G四个站点,从信息可以看出3路没有和2路有交叉的站点,所以不能换乘,5路和2路都经过C站点,代表可以换成,怎么用一条SQL语句或过程查询出有重合站点的车辆信息,就像上面语句中2路和5路有C站点重合,就把2路和5路的信息查询出来,显示在页面上,望那位大虾帮一下小弟,(可以把上面2条语句整合一下,或者写个过程等)不胜感激。
select tt.LINE_ID,
tt.station_name,
l.LINE_NAME
from (
select s.*,
l.LINE_NAME,
count(1) over(partition by s.LINE_ID) as count_lines
from yy_line_view l,
yy_line_station_view s
where s.LINE_ID=l.GIS_LINE_ID
and s.up_or_down=0
)tt
where count_lines > 1
order by 1;
对line_id进行Count,大于等于2的就把他们路线名拿出来就可以了。
假如你的上行,下行的数据会有两条的话,用>2
假如只是部分数据有,部分没有的话,就是说,只有上行,或者只有下行的话,就需要对原来的view再作一次筛选。