table有大致如下的记录,这些记录已经是按照规定要求排序好的了field1  field2
A B
B F
C D
E F
F A
...我要实现的效果field
A
B
F
C
D
E
...做法就是先取第一条记录中的field1字段值,然后再取field2字段值,在取到field1、field2字段值的时候,得先判断我当前取得的列表中是否已经存在了这些字段值,如果存在则跳过,处理完继续下一条,直到结束。
另外,同一条记录中field1和field2值是不同的。不要写delphi程序,也不要写存储过程什么的,我想要一条SQL语句OPEN直接返回我要的结果,请问该怎么做,最好效率要高的,因为数据量比较大,谢谢各位!

解决方案 »

  1.   

    CSDN把我的Tab给干掉了 上面A是field1字段的值 B是field2字段的值 下同
    另外CSDN老让我重新登录 不知道怎么回事 发一个帖子让我登录了N次 纳闷...
      

  2.   

    select * from (select field1 as f from 表
    union
    select field2 from 表 where field2 not in (select field1 from 表)) order by f
      

  3.   

    老大 UNION把顺序搞乱了 麻烦再看看 因为涉及方向问题 不能乱的
      

  4.   

    记录间没什么联系,一条语句难实现,
    前台不允许用delphi实现,后台不能使用临时表/函数/视图/存储过程等
    可以说,这个表的设计是失败的,程序也是失败的...
      

  5.   

    select distinct * from (select field1 from 表 union select field2 from 表) T
      

  6.   

    再加个 order by field1
      

  7.   


    declare @tb table
    (
        field1  char(1),
        field2  char(1)
    )insert into @tb
    select 'A','B' union all
    select 'B','F' union all
    select 'C','D' union all
    select 'E','F' union all
    select 'F' ,'A'Select [RowID] = IDENTITY (int, 1, 1), * INTO # FROM @tb 
    Select * FROM #SELECT min(NN.RowID) as  RowID,NN.MM    FROM (select  *  from (select field1 AS MM,RowID  from # union select field2 AS MM,RowID from #) T ) NN GROUP BY NN.MM order by RowIDDrop TABLE # 
      

  8.   

    测试结果
    RowID MM
    1     A 
    1     B 
    2     F 
    3     C 
    3     D 
    4     E 
      

  9.   

    首先谢谢上面几位 我这里说的和数据库设计没关系 上面给出语句的朋友也还没看明白我的意思 我这里再列一下意思:在table表OPEN之后(这时候table的顺序是处理后的了 可以认为有一个既定的ID排序字段)定位第一条记录:A  B ;
    结果集result依次为A、B定位第二条记录:B、F  
    结果集result依次为A、B、F(第二条记录中的B前面已经取到,所以后面都不需要取B)定位第三条记录:C、D 
    结果集result依次为A、B、F、C、D(C、D在前面并没取到 所以这里要取)定位第四条记录:E、F 
    结果集result依次为A、B、F、C、D、E(E前面并没有取到 但F前面已经取到了)定位第五条记录:F、A 
    结果集result依次为A、B、F、C、D、E(F、A在前面已经取到 所以这里不需要再取)...
     
    应该很清楚了吧 我想要的就是需要一条SQL语句把我这个result给返回来,结果就是这样的顺序,不要存储过程,因为数据库那边不是我维护的 谢谢!delphi实现其实也可以 不过安照描述的处理起来 效率会比较低!
      

  10.   

    你这个问题一句SQL真的不太好实现!
      

  11.   

    直接UNION就行了--测试数据
    declare @tb table
    (
        field1  char(1),
        field2  char(1)
    )insert into @tb
    select 'A','B' union all
    select 'B','F' union all
    select 'C','D' union all
    select 'E','F' union all
    select 'F' ,'A'
    select field1 as res from @tb
    union 
    select field2 as res from @tb/*
    res  
    ---- 
    A
    B
    C
    D
    E
    F(所影响的行数为 6 行)*/
      

  12.   

    存储过程 也是可以一个open来执行的
      

  13.   

    直接用union 就可以了,它会自动去重复的
      

  14.   

    还是有好些人没明白我的意思 这是一个话单的信令表内容 数据库是ORACLE的
    我上面给出的是已经经过处理的数据了 用SQL语句处理也是可以的 但是效率实在比较低 
    目前把字段内容全部放进内存里面用DELPHI处理 效率高很多 谢谢各位!