根据发生次数编号数据

时间:2013-08-23 10:06:59

标签: sql-server relational-database

我需要帮助根据特定值的出现对数据进行编号。

让我们考虑一下输入

Col1    Col2
1   a
2   1
3   2
4   3
5   a
6   1
7   4
8   a
9   2
10  3

我想根据' a'出现的数字对它们进行编号。在col2。输出应该看起来像

Col1    Col2    Result
1   a   1
2   1   1
3   2   1
4   3   1
5   a   2
6   1   2
7   4   2
8   a   3
9   2   3
10  3   3

3 个答案:

答案 0 :(得分:1)

您可以使用光标。

1) Create a temp table
2) Output the result to a cursor
3) Loop throught the cursor and update the temp table
4) Select from the temp table. 

编辑:

我不知道这会有多大用处,但这句话会在不使用游标的情况下得到你想要的东西。

SELECT [Col1]
      ,[Col2]
      , (select count(*) from Table_1 where Col2 = 'a' and Col1 <= t1.Col1) 
  FROM [Table_1] t1 

答案 1 :(得分:1)

Declare @a table (Col1 int,Col2 Char(1))
Insert into @a Values (1,'a'),(2,'1'),(3,'2'),(4,'3'),(5,'a'),(6,'1'),(7,'4'),(8,'a'),(9,'2'),(10,'3');

;With CTE as
(
Select *,Row_Number() OVER (Order by Col1) as rn from @a
)


Select a.Col1,a.Col2,
(Select COUNT(Col2) from CTE a2 where a2.Col2=a.Col2 and a2.rn <= a.rn)
from CTE a

答案 2 :(得分:1)

请注意,在SQL Server 2012中,您可以使用累积总和来执行此操作:

select col1, col2,
       sum(case when col2 = 'a' then 1 else 0 end) over (order by col1) as result
from t;

在支持窗口/分析功能的其他数据库中也支持累积和。