SQL Server:嵌套时用int替换不同的值

时间:2016-05-07 17:39:42

标签: mysql sql-server

为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, #####

这可以通过SQL脚本实现吗?

因此,提供的答案非常适合Microsoft SQL。 有没有办法在MySQL中做到这一点? 似乎没有任何功能存在于那里。

1 个答案:

答案 0 :(得分:0)

尝试类似......

select 
  DENSE_RANK() OVER ( order by col1)                                 Col1
 ,DENSE_RANK() OVER (PARTITION BY col1 order by col1,col2)           Col2
 ,DENSE_RANK() OVER (PARTITION BY col1,col2 order by col1,col2,col3) Col3
From TableName