基于类似列的数字行

时间:2014-08-18 19:52:45

标签: sql oracle oracle11g group-by

如何根据行中的类似元素对行进行编号。例如。从这张表

Id ColA  ColB
1.   A.       B
2.   A.       C
 3.  A.        c
4.   A.       B
5.   B.       A
6.   B.       A

我希望得到下表

  Id ColA  ColB. Grouped by
 1.   A.       B.     1
 2.   A.       C.      2
 3.  A.        c.     2
 4.   A.       B.     1
 5.   B.       A.     3
 6.   B.       A.     3

逻辑是:Id 1和4的行在A列和B列中具有相似的元素,因此它们的编号与相同的组编号相同。这个数字本身并没有发挥作用。 因此,对于Id 2和3的行,它们会得到相同的数字。

2 个答案:

答案 0 :(得分:2)

最简单的方法是根据两列只有rank行。由于第2行和第3行似乎具有相同的"Grouped by",无论Cc的情况如何不同(假设这不是错字),您可以拥有根据列的upper(或lower)对它们进行排名:

SELECT colA, colB, 
       RANK() OVER (ORDER BY UPPER(colA), UPPER(colB)) AS "Grouped by"
FROM   my_table

答案 1 :(得分:2)

你可以这样做。

select p.id,p.cola,p.colb,se2.counter  from 
(SELECT se.*,ROWNUM as counter
FROM (SELECT  COLA,COLB FROM table1
GROUP BY  COLA,COLB) se
) se2, table1 p
where 
p.cola = se2.cola
and
p.colb = se2.colb