用int替换不同的嵌套值

时间:2016-05-15 22:10:18

标签: mysql

我在表中有一个嵌套的数据树,我需要对它们进行编号。很容易找到不同的值,获取行号,然后使用它,我有一个嵌套树,需要为每个级别执行此操作。

我的桌子看起来像这样(我显示三个级别,但实际上我有四个或更多)

col1, col2, col3, some data cols ....
-----------------------------------
'AAA', 'AA', 'A', #####
'AAA', 'AA', 'B', #####
'AAA', 'AA', 'C', #####
'AAA', 'BB', 'D', #####
'AAA', 'BB', 'E', #####
'AAA', 'BB', 'F', #####
'BBB', 'CC', 'G', #####
'BBB', 'CC', 'H', #####
'BBB', 'CC', 'I', #####
'BBB', 'DD', 'J', #####
'BBB', 'DD', 'K', #####
'BBB', 'DD', 'L', #####

等...

有比这更多的数据,AAA代表一些字符串等

我需要的是col1中的每个不同,替换(或放入新表)值1,2,3等

然后对于col1中的每个不同,找到col2中的distinct并替换为1,2,3等。对col3重复。

得到这样的东西

col1, col2, col3, some data cols ....
   1,    1,   1, #####
   1,    1,   2, #####
   1,    1,   3, #####
   1,    2,   1, #####
   1,    2,   2, #####
   1,    2,   3, #####
   2,    1,   1, #####
   2,    1,   2, #####
   2,    1,   3, #####
   2,    2,   1, #####
   2,    2,   2, #####
   2,    2,   3, #####

这可以通过MySQL脚本来实现吗?

我有以下内容对Microsoft SQL服务器非常有效,现在需要在MySQL中使用相同的功能,但无法找到相同的功能。

SELECT 
DENSE_RANK() OVER (ORDER BY col1) R1,
DENSE_RANK() OVER (PARTITION BY col1 ORDER BY col1, col2) R2,
DENSE_RANK() OVER (PARTITION BY col1, col2 ORDER BY col1, col2, col3) R3
FROM table

0 个答案:

没有答案