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-是的,你是对的-我按子句删除了错误的分区。谢谢你的回答。这是一个有趣的解决方案。谢谢你的回答。这是一个有趣的解决方案。