ITPUB??ì3
12月微软Hyper-V虚拟化沙龙主题征集
ITPUB论坛 » Oracle开发 » 一个排序问题

标题: [SQL] 一个排序问题
在线/呼叫 caizhuoyi
Oracle Stranger


精华贴数 2
个人空间 0
技术积分 1604 (1068)
社区积分 488 (1470)
注册日期 2006-3-1
论坛徽章:5
授权会员生肖徽章2007版:蛇生肖徽章2007版:龙2008北京奥运纪念徽章:棒球数据库板块每日发贴之星 
      

发表于 2008-9-18 18:28 
一个排序问题

有一个表t_org(id int primary key,
m1 int,
m2 int,
m3 int,
m4 int,
m5 int);
另外一个临时表t_temp与t_org结构一致。

现在要比较输出t_org表中两两记录之间列相同个数(id除外),比如3个相同的记录。
t_org表中初始数据如下:
(001,1,2,3,4,5);
(002,2,2,3,4,5);
(003,1,3,3,4,6);
(004,1,4,7,8,5);
(005,5,3,3,4,5);
从第一条记录开始遍历,将两两之间列(id除外)相同的记录插入t_temp,并将每两个相同记录隔开,得到如下记录:
(001,1,2,3,4,5);
(002,2,2,3,4,5);
(888,null,null,null,null,null);--一律用此记录分隔
(001,1,2,3,4,5);
(003,1,3,3,4,6);
(888,null,null,null,null,null);
(002,2,2,3,4,5);
(005,5,3,3,4,5);
(888,null,null,null,null,null);
(003,1,3,3,4,6);
(005,5,3,3,4,5);
(888,null,null,null,null,null);
再用Sys_Refcursor取结果集,但取的结果集并不是严格按照比较插入的顺序输出的。
若要达到理想输出结果,怎样排序?
欢迎前来解惑,甚谢!


__________________
我不在江湖,但江湖中有我的传说;
我身在江湖,江湖里却没有我的传说。
只看该作者    顶部
在线/呼叫 homeworld80
天使之月


精华贴数 0
个人空间 112
技术积分 813 (2381)
社区积分 3 (22344)
注册日期 2006-12-1
论坛徽章:4
铁扇公主授权会员2008北京奥运纪念徽章:帆船2008北京奥运纪念徽章:足球  
      

发表于 2008-9-18 18:52 
最简单的做法是在t_temp表加个字段,用来把插入的数据顺序编号,再按照这个字段排序
或者在插入的时候用append,按rowid排序

[ 本帖最后由 homeworld80 于 2008-9-18 18:54 编辑 ]


__________________
不畏风霜向晚欺
独开众卉已凋时
只看该作者    顶部
在线/呼叫 newkid
资深新手
老程序员


来自 银河系
精华贴数 2
个人空间 0
技术积分 2756 (579)
社区积分 0 (121048)
注册日期 2004-6-26
论坛徽章:5
生肖徽章2007版:马生肖徽章2007版:鸡2008北京奥运纪念徽章:垒球2008北京奥运纪念徽章:羽毛球  
      

发表于 2008-9-18 21:57 
直接用SQL不行吗?

with vw_t as (
     select id,1 as col_id, m1 as col_value from t_org
     UNION ALL
     select id,2 as col_id, m2 as col_value from t_org
     UNION ALL
     select id,3 as col_id, m3 as col_value from t_org
     UNION ALL
     select id,4 as col_id, m4 as col_value from t_org
     UNION ALL
     select id,5 as col_id, m5 as col_value from t_org
     )
SELECT a.id as id1
      ,b.id as id2
      ,sum(case when a.col_value=b.col_value then 1 else 0 end) as cnt
  FROM vw_t a,vw_t b
WHERE a.id <> b.id and a.col_id = b.col_id
GROUP BY a.id,b.id;

如果你只想要输出值相同的组合,就把a.col_value=b.col_value 加到where中。


__________________
只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问