解决方案 »
- 一个很蛋疼的sql,性能太差求优化
- 求助一个SQL
- win7 安装oracle 10g 后需要主机身份验证,但是总是不能验证通过
- 求一SQL组合如下数据。
- 关于oracle的一个问题
- 提示:ORA-02269 出错
- 是谁把oracle翻译成甲骨文的?oracle单词真的有这个意思么?
- 数据备份得问题 可能很简单
- 插入时间的sql语句如何写啊?
- 我是新手,我想问问题....
- 求助(weblogic+oracle):weblogic.management.provider.EditNotEditorException: Not edit lock owner
- 请教诸位高手一个很基础的trigger问题
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
没有实测,楼主自己试试吧
(
BeginStation VARCHAR2(20),
DestStation VARCHAR2(20)
);
INSERT INTO T86 VALUES('北京','成都');
INSERT INTO T86 VALUES('哈尔滨','北京');
INSERT INTO T86 VALUES('成都','北京');
INSERT INTO T86 VALUES('北京','哈尔滨');
实测结果:
(
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
--借用测试数据
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
北京 北平 北平北京
北平 北京 北平北京
北京 成都 成都北京
成都 北京 成都北京
哈尔滨 北京 哈尔滨北京
北京 哈尔滨 哈尔滨北京
杭州 十堰 十堰杭州
十堰 杭州 十堰杭州