如下所示,在test表中:
A B D E
10 tec1 3 100101
10 tec2 3 100101
20 tec2 3 100101
20 tec1 3 100101
30 tec3 3 100101
40 tec4 3 100101
11 tec1 4 100101
11 tec2 4 100101
21 tec1 4 100101
21 tec2 4 100101
31 tec3 4 100101
41 tec4 4 100101想查询出下列的数据,满足下列条件,满足下面的条件:
如果 D、E列相同的话,对A、B列数据做如下处理,
比如 前四条记录:A列的10对应着B列的 tec1,tec2;A列的20也对应着B列的tec1,tec2;那么就任意分配tec1,tec2给A列的10和20。使其成为 10 tec1,20 tec2 或者 10 tec2,20 tec1。最后得到的数据,如下所示:A B D E
10 tec1 3 100101
20 tec2 3 100101
30 tec3 3 100101
40 tec4 3 100101
11 tec1 4 100101
21 tec1 4 100101
31 tec3 4 100101
41 tec4 4 100101还请各位帮帮忙。谢谢啊
A B D E
10 tec1 3 100101
10 tec2 3 100101
20 tec2 3 100101
20 tec1 3 100101
30 tec3 3 100101
40 tec4 3 100101
11 tec1 4 100101
11 tec2 4 100101
21 tec1 4 100101
21 tec2 4 100101
31 tec3 4 100101
41 tec4 4 100101想查询出下列的数据,满足下列条件,满足下面的条件:
如果 D、E列相同的话,对A、B列数据做如下处理,
比如 前四条记录:A列的10对应着B列的 tec1,tec2;A列的20也对应着B列的tec1,tec2;那么就任意分配tec1,tec2给A列的10和20。使其成为 10 tec1,20 tec2 或者 10 tec2,20 tec1。最后得到的数据,如下所示:A B D E
10 tec1 3 100101
20 tec2 3 100101
30 tec3 3 100101
40 tec4 3 100101
11 tec1 4 100101
21 tec1 4 100101
31 tec3 4 100101
41 tec4 4 100101还请各位帮帮忙。谢谢啊
不成,其实就是想 把A列的数据唯一,唯一的规则就是如果A列的某个值与表中其他值所对应的B列数据相同的话,就分别对应一个。
10 tec1 3 100101
20 tec2 3 100101
30 tec3 3 100101
40 tec4 3 100101
11 tec1 4 100101
21 tec1 4 100101
31 tec3 4 100101
41 tec4 4 100101 ==============================================
那结果中怎么出现了
11 tec1 4 100101
21 tec1 4 100101
?
不好意思,这里写错了,
11 tec1 4 100101
21 tec2 4 100101
在D、E列完全相同的情况下,
如果A列里有某个数据 对应的B列的数据有3个值,那A列里就会有3条数据对应着 B列的这3个值。
比如说 A列里 10 对应着B列tec1,tec2,tec3。那么A列里肯定就会有 11 或12 也对应着 tec1,tec2,tec3
换句话说 这个表中就会有 9条数据:
10 tec1
10 tec2
10 tec3
11 tec1
11 tec2
11 tec3
12 tec1
12 tec2
12 tec3
我现在就是要把这9条数据变成3条数据,让10,11,12分别对应着其中的一个值
即 或者 10 tec1,11 tec2,12 tec3
或者 10 tec2,11 tec3,12 tec1
或者 10 tec3,11 tec1,12 tec2呵呵~ 谢谢大家,记得以前有这样的帖子,没找到,急着用!多谢大家了!
(SELECT A,ROW_NUMBER() OVER(ORDER BY A) no,D,E FROM test GROUP BY D,E,A) x,
(SELECT B,ROW_NUMBER() OVER(ORDER BY B) no,D,E FROM test GROUP BY D,E,B) y
WHERE x.D = y.D AND x.E = y.E AND x.no = y.no ORDER BY D,E,A;
max(decode(rn1,rn2,b)) b,
d,e
from (
select a,b,d,e,rownum rn, row_number()over(partition by a,d,e order by b)rn1,
row_number()over(partition by b,d,e order by a)rn2 from test1)
group by a,d,e
order by max(rn)
rownum和order by max(rn)是为了方便楼主进行比较添加的
可以去掉