2017-02-25 39 views
0

我在黑斑羚(TBL1)中有一个表格,其中包含具有不同数量的第一个普通字母的不同名称。该表包含约3M记录。我想添加一个新的属性到表中,其中每个常见的第一个字母将有一个类。这与DENSE_RANK工作方式相同,但是具有动态数量的第一个字母。相同的第一个字母的数量不应少于p=3字母(p =参数)。
这里是表和所要求的结果的例子:通过普通字母在黑斑羚中记录的有效分类

| ID | Attr1  | New_Attr1 | Some more attribute... 
+-------+--------------+-------------+----------------------- 
| 1 | ZXA-12  | 1   | 
| 2 | YL3300  | 2   | 
| 3 | ZXA-123  | 1   | 
| 4 | YL3400  | 2   | 
| 5 | YL3-aaa  | 2   | 
| 6 | TSA 789  | 3   | 

...

回答

1

这是否你想要做什么?

select t.*, 
     dense_rank() over (order by strleft(attr1, 3)) as newcol 
from . . .; 

“3”是您的参数。

作为说明:在您的示例中,您似乎已按倒序字母顺序分配了新值。因此,您需要descorder by

+0

非常感谢!我想保留表格的顺序。它是否因订单而改变? – Avi

+0

字母顺序仅仅是一个例子,不能是真实的情况。 – Avi

+1

@Avi。 。 。将'order by id'添加到查询中。 –