我需要帮助根据特定值的出现对数据进行编号。
让我们考虑一下输入
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
答案 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;
在支持窗口/分析功能的其他数据库中也支持累积和。