环境 :SQL2000问题描述:
(此问题描述的意思为找车辆经过某个区间的进入和驶出记录)
假设一辆车从A地区到B地区,进入A地区记录一次,在从A地区进入B地区的时候则再记录一次,如果设定A地区到B地区为一个区间,则此时在进入B地区的时候还要记录进入B地区的这辆从A地区来。则为编号    车       经过地区   上次进入
1       车辆1    A地区      0(表示没有)
2       车辆1    B地区      1 (记录编号1,表示上次从A地区经过)
3       车辆1    E地区      0 (表示没有)
4       车辆3    A地区      0 (表示没有)
5       车辆4    C地区      0 (表示没有)
6       车辆3    B地区      4 (记录编号4,表示上次从A地区经过)
7       车辆5    C地区      0 (表示没有)问题:
想要实现查询出来的效果:1.没有被关联上次进入的信息不显示
例:编号3、5、7 2.被关联的数据需显示在一起。
例:若 编号4的信息被编号6所关联,则两条信息显示为
4       车辆3    A地区      0 (表示没有)
6       车辆3    B地区      4 (记录编号4,表示上次从A地区经过)最终实现显示效果:
1       车辆1    A地区      0(表示没有)
2       车辆1    B地区      1 (记录编号1,表示上次从A地区经过)
4       车辆3    A地区      0 (表示没有)
6       车辆3    B地区      4 (记录编号4,表示上次从A地区经过)在线求解.

解决方案 »

  1.   

    不太明白1       车辆1    A地区      0(表示没有)
    2       车辆1    B地区      1 (记录编号1,表示上次从A地区经过)
    3       车辆1    E地区      0 (表示没有)
    记录编号1,表示上次从A地区经过
    ---
    为什么不能是从E地区经过
      

  2.   

    切select * from tb where 经过地区 in (A,B)
      

  3.   


    god....
    老兄,我是只打个比喻,你不能这样取巧吧
    怎么可能一个区间呢
    还有可能交叉区间,其它多个区间等等这个问题的切入点应该是
    ID  与  上次进入ID
    通过这两个去做查询,算我多余引申的那么复杂...这样的结构
    ID    upper_ID
    1     0
    2     0
    3     0
    4     3
    5     2显示为:
    ID    upper_ID
    3     0
    4     3
    2     0
    5     2   
      

  4.   

    select A.编号 
    from 表 A 
    left outer join 表 B 
    on A.编号 = B.上次进入 
    where B.上次进入 is null and A.上次进入 = 0select AA.* from 表 AA
    where AA.编号 not in
    (select A.编号 
    from 表 A 
    left outer join 表 B 
    on A.编号 = B.上次进入 
    where B.上次进入 is null and A.上次进入 = 0) A
      

  5.   


    --> 测试数据:#
    if object_id('tempdb.dbo.#') is not null drop table #
    create table #(ID int, upper_ID int)
    insert into #
    select 1, 0 union all
    select 2, 0 union all
    select 3, 0 union all
    select 4, 3 union all
    select 5, 2;with cte as
    (
        select * from # where upper_ID<>0
        union all
        select a.* from # a join cte b on a.ID=b.upper_ID
    )
    select * from cte --> 结果顺序略有不同, 需要什么顺序自己排/*
    ID upper_ID
    3 0
    4 3
    2 0
    5 2   
    */
      

  6.   

    --> 测试数据:#
    if object_id('tempdb.dbo.#') is not null drop table #
    create table #(ID int, upper_ID int)
    insert into #
    select 1, 0 union all
    select 2, 0 union all
    select 3, 0 union all
    select 4, 3 union all
    select 5, 2;with cte as
    (
        select *, sort=ID  from # where upper_ID<>0
        union all
        select a.*, b.sort from # a join cte b on a.ID=b.upper_ID
    )
    select * from cte order by sort, upper_ID --已加入排序/*
    ID upper_ID
    3 0
    4 3
    2 0
    5 2   
    */