原表1(路段路由表):XLBH(线路编号) LDBH(路段编号) SZGJFX(所在公交方向) LDSXH(路段顺序号)
                     10507         217835911         0                    10
                     10507         217634969         0                    20
                     ……
                     ……
                     10507         215221088         1                    10 
                     10507         215222628         1                    20  
                     ……
                     
原表2(站点路由表): XLID(线路编号) SZGJFX         ZDID(站点编号)        ZDSXH(站点顺序号)
                     10507            0              7FA10000               10
                     10507            0              809F0003               20
                     ……
                     10507            1              728C0000               10
                     10507            1              738E0002               20
10507:表示636路的线路编码 ;0:上行 ;1:下行原表3(站点路段对应表)  ZDID(站点编号) SZLDBH(该站点所在路段编号)
                         9A54000            211261451目标表4结构(路段站点路由表):
   LINE_ID(线路编码)   ROUTE_NO(路段/站点顺序号)ROUTE_NUMBER(路段编号) STOP_ID(站点编号) UP_DOWN(上下行)
 要求:将原表1和原表2的数据并起来,以目标表4的表结构展示。
 注意1:在目标表4中路段上有站点的,应按照上行站点、下行站点、所在路段   的顺序来排列。(利用原表3的数据来查询某路段上是否有站点)
 注意2:在目标表4中上下行都有的路段应该修双行(代码为2)。请各位大侠帮忙,谢谢~

解决方案 »

  1.   

    这样行吗?
    SELECT *
      FROM (SELECT XLID, ZDSXH, LDBH, ZDID, 2
              FROM T1, T2, T3
             WHERE T1.LDBH = T3.LDBH
               AND T2.ZDID = T3.ZDID
               AND LDBH IN (--查双行站点
                            SELECT LDBH
                              FROM (SELECT XLID, ZDSXH, LDBH, ZDID, SZGJFX
                                       FROM T1, T2, T3
                                      WHERE T1.LDBH = T3.LDBH
                                        AND T2.ZDID = T3.ZDID)
                             GROUP BY LDBH
                            HAVING COUNT(ZDID) > 1
                            )
            UNION ALL
            SELECT XLID, ZDSXH, LDBH, ZDID, SZGJFX
              FROM T1, T2, T3
             WHERE T1.LDBH = T3.LDBH
               AND T2.ZDID = T3.ZDID
               AND LDBH NOT IN (--查单行站点
                                SELECT LDBH
                                  FROM (SELECT XLID, ZDSXH, LDBH, ZDID, SZGJFX
                                           FROM T1, T2, T3
                                          WHERE T1.LDBH = T3.LDBH
                                            AND T2.ZDID = T3.ZDID)
                                 GROUP BY LDBH
                                HAVING COUNT(ZDID) > 1
                                )
            )
     GROUP BY SZGJFX, LDBH
      

  2.   

    谢谢楼上的帮忙,可是不行的,不是这样的,
    不是单纯的吧T1,T2的内容并起来放到T3中,
    T3的顺序号,要按照公交线路从起点站到终点站经过的路段和站点的依次顺序来排列的。原来做的时候是路段一张表,站立一张表分开的,而且上、下行都分开的,现在是要做在一张表里,顺序号很麻烦,有路段和站点的顺序,还有上下行的顺序,我不知道怎么写。原路段路由表:上行:起始路段-途径路段1……途径路段N-终止路段(顺序号依次为10-20-……N×10)
                 下行: 起始路段-途径路段1……途径路段N-终止路段(顺序号依次为10-20-……N×10)
    原站点路由表:上行:起始站点-途径站点1……途径站点N-终止站点(顺序号依次为10-20-……N×10
            下行:起始站点-途径站点1……途径站点N-终止站点(顺序号依次为10-20-……N×10)         现在的顺序:起点站--起点站所属的路段--途径第1个路段-途径第2个路段-……-途径第N个路段上的站点(上行站点)-(下行站点)---途径第N个路段-终点站-终点站所在路段。不知道是否表达清楚了,大家帮帮忙啊!
      

  3.   

    谢谢楼上的帮忙,可是不行的,不是这样的,
    不是单纯的吧T1,T2的内容并起来放到T3中,
    T3的顺序号,要按照公交线路从起点站到终点站经过的路段和站点的依次顺序来排列的。原来做的时候是路段一张表,站立一张表分开的,而且上、下行都分开的,现在是要做在一张表里,顺序号很麻烦,有路段和站点的顺序,还有上下行的顺序,我不知道怎么写。原路段路由表:上行:起始路段-途径路段1……途径路段N-终止路段(顺序号依次为10-20-……N×10)
                 下行: 起始路段-途径路段1……途径路段N-终止路段(顺序号依次为10-20-……N×10)
    原站点路由表:上行:起始站点-途径站点1……途径站点N-终止站点(顺序号依次为10-20-……N×10
            下行:起始站点-途径站点1……途径站点N-终止站点(顺序号依次为10-20-……N×10)         现在的顺序:起点站--起点站所属的路段--途径第1个路段-途径第2个路段-……-途径第N个路段上的站点(上行站点)-(下行站点)---途径第N个路段-终点站-终点站所在路段。不知道是否表达清楚了,大家帮帮忙啊!