Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于相似列对行进行编号_Sql_Oracle_Oracle11g_Group By - Fatal编程技术网

Sql 基于相似列对行进行编号

Sql 基于相似列对行进行编号,sql,oracle,oracle11g,group-by,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.

如何根据行中的相似元素对行进行编号。从这张桌子上

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行和第3行似乎具有相同的分组方式,而不管C和C的情况如何(假设这不是打字错误),因此您必须根据or对它们进行排序,就列而言:

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

最简单的方法是根据两个列只显示行。由于第2行和第3行似乎具有相同的分组方式,而不管C和C的情况如何(假设这不是打字错误),因此您必须根据or对它们进行排序,就列而言:

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

你可以这样做

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

你可以这样做

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

你能解释一下你是如何达到这个结果的逻辑吗?这对我来说有点神秘。我已经更新了这个问题。你能解释一下你是如何得出这个结果的逻辑吗?这对我来说有点神秘。我已经更新了问题谢谢你的回答。但是,您确定这个排名不总是返回1作为分组值吗?我的意思是你需要分区子句吗?@user3260813-是的,你是对的-我按子句删除了错误的分区。谢谢你的回答。但是,您确定这个排名不总是返回1作为分组值吗?我的意思是你需要分区子句吗?@user3260813-是的,你是对的-我按子句删除了错误的分区。谢谢你的回答。这是一个有趣的解决方案。谢谢你的回答。这是一个有趣的解决方案。