本帖最后由 HLiuHuiBin 于 2012-01-02 13:06:44 编辑

解决方案 »

  1.   

    select 
    distinct t.列1,t.列2
    from 
    (select 列1,列2,列1||列2 as 列3 from 表 union 
     select 列1,列2,列2||列1 as 列3 from 表 ) as t2,
    表 t
    where t.列1=t2.列1 and t.列2=t2.列2
    order by t2.列3
    没有实测,楼主自己试试吧
      

  2.   

    实测数据:CREATE TABLE T86 
    (
        BeginStation VARCHAR2(20),
        DestStation  VARCHAR2(20)
    );
    INSERT INTO T86 VALUES('北京','成都');    
    INSERT INTO T86 VALUES('哈尔滨','北京');
    INSERT INTO T86 VALUES('成都','北京');
    INSERT INTO T86 VALUES('北京','哈尔滨');
    实测结果:
      

  3.   

    引用楼上的实测数据:CREATE TABLE T86 
    (
        BeginStation VARCHAR2(20),
        DestStation  VARCHAR2(20)
    );
    INSERT INTO T86 VALUES('北京','成都');    
    INSERT INTO T86 VALUES('哈尔滨','北京');
    INSERT INTO T86 VALUES('成都','北京');
    INSERT INTO T86 VALUES('北京','哈尔滨');我将楼上的代码打下来测试一下,绝对好用:select BeginStation , DestStation,
    case when nlssort(BeginStation , 'NLS_SORT = SCHINESE_PINYIN_M')>NLSSORT(DestStation, 'NLS_SORT = SCHINESE_PINYIN_M')
    then BeginStation || DestStation
    when NLSSORT( BeginStation , 'NLS_SORT = SCHINESE_PINYIN_M')<NLSSORT(DestStation , 'NLS_SORT = SCHINESE_PINYIN_M')
    then DestStation || BeginStation
    end as f1
    from T86
    order by f1;
    上面有一个地方我做了小小的更改'NLS_SORT = SCHINESE_PINYIN_M',这个决定跟据什么进行排序,其实对于你这的问题这些都无关紧要了,解释楼上代码的意思:楼上的代码意思 DANISH_M Danish sort supports sorting lowercase characters before uppercase characters写在SELECT后面的那段代码是有三个字段,第三个字段是后生成的,就是要进行排序的依据f1。然后用CASE语句进行始发站和终点站的合并,对两个字段分别排序,如果始发站大于终点站则直接相连,否则用终点站连接始发站,这样产生了一排序字段,这个字段的规律如下结果显示。这样就解决了你的问题,这是我个人理解,当然要感谢楼上哈,让我也学到了不少东西。
    相关链接:http://hi.baidu.com/a78270528/blog/item/591280f432813070ddc47418.html
      

  4.   


    --借用测试数据
    CREATE TABLE T86 
    (
        BeginStation VARCHAR2(20),
        DestStation  VARCHAR2(20)
    );
    INSERT INTO T86 VALUES('北京','成都');    
    INSERT INTO T86 VALUES('哈尔滨','北京');
    INSERT INTO T86 VALUES('成都','北京');
    INSERT INTO T86 VALUES('北京','哈尔滨');
    INSERT INTO T86 VALUES('杭州','十堰');
    INSERT INTO T86 VALUES('十堰','杭州');
    INSERT INTO T86 VALUES('北京','北平');
    INSERT INTO T86 VALUES('北平','北京');
    --加上都是“北”开头的特例,测试asciiselect BeginStation , DestStation,
    case 
      when ascii(BeginStation)>=ascii(DestStation) then BeginStation || DestStation
      else DestStation || BeginStation
    end 
    as f1
    from T86
    order by f1;/*
    BEGINSTATION DESTSTATION F1
    北京 北平 北平北京
    北平 北京 北平北京
    北京 成都 成都北京
    成都 北京 成都北京
    哈尔滨 北京 哈尔滨北京
    北京 哈尔滨 哈尔滨北京
    杭州 十堰 十堰杭州
    十堰 杭州 十堰杭州