SP将数据填充为列存储样式

时间:2016-10-21 19:23:08

标签: sql sql-server performance

我有通常的方式存储数据。

Id  | Name | Number
----+------+-------
 1    A      101
 2    B      102
 3    A      103
 4    A      105
 5    C      104
 6    B      106
 7    C      108

等等。

现在我想将此表转换为类似于列存储的内容。 例如,应按名称对所有设施进行排序和分组。 此外,如果新记录以相同的名称到达,则应分配一个ID,该ID在为该名称组分配的范围内。

只是详细说明。如果'A'的ID范围为1到20,并且当前在表中有5个ID,那么当新记录到达名称A时,应该为其分配ID = 6.

名称与其他名称一致。每次填充ID时,metatable中的NextID必须递增1。

截至目前,我已经创建了一个元表,用于存储最小,最大ID以及每个名称组的下一个ID。

元表

Name  MinID  MaxId  NextID 
---------------------------
  A     1      30      6   
  B    31      60     45   
  C    61     100     78   

使用case语句填充邮件表中的数据。但它的效率非常低,查询也很长。

注意:“数字”列无关紧要。

有什么可能是一种更有效,更快捷的方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

SELECT Name, 
       MIN( ID ),
       MAX( ID ), 
       COUNT(*) OVER ( PARTITION BY Name ) + 1 AS NextID
 FROM YourTable
GROUP BY Name;