0

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

让我们考虑输入

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

我想根据 col2 中“a”的出现对它们进行编号。输出应该看起来像

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
4

3 回答 3

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 
于 2013-08-23T10:19:45.333 回答
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
于 2013-08-23T10:24:00.557 回答
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;

其他支持窗口/分析函数的数据库也支持累积和。

于 2013-08-23T11:18:59.977 回答