近日处理客户的逻辑时需要一个有条件的自增长字段
比如表A中有两个字段a,b,现在需要对符合条件的记录,对a进行计数,并存在a中。
a b
0 y
0 n
0 n
0 y
更改后需要达到的效果
a b
1 y
0 n
0 n
2 y
当然,可以用游标实现,也许游标的效率比我下边的写法效率更高,但是游标不经常写,总感觉写起来麻烦,还是找点儿直观些的做法。
于是网上搜到一种解决办法,用临时表和while循环,借鉴下来写如下操作:

Temptable Update Method one
1 CREATE TABLE #tb
2 (
3 ID int not null identity(1,1),
4 a int,
5 b varchar(50)
6 )
7 declare @rows int
8 declare @counter int
9 declare @crow int
10
11 insert into #tb(b) values('y')
12 insert into #tb(b) values('n')
13 insert into #tb(b) values('n')
14 insert into #tb(b) values('y')
15
16 select @rows=@@rowcount
17 select @counter=1
18 select @crow=0
19 while @counter<@rows
20 begin
21 IF EXISTS(SELECT * FROM #TB where ID=@counter and b='y')
22 begin
23 update #tb
24 set a=@crow
25 where id=@counter and b ='y'
26
27 SET @crow=@crow+1
28 end
29 SELECT @counter=@counter+1
30 end
写了之后发现可以有改进的地方,于是就改了一下写法:

Code
1 CREATE TABLE #tb
2 (
3 ID int not null identity(1,1),
4 a int,
5 b varchar(50)
6 )
7 declare @rows int
8 declare @counter int
9 declare @crow int
10
11 insert into #tb(b) values('y')
12 insert into #tb(b) values('n')
13 insert into #tb(b) values('n')
14 insert into #tb(b) values('y')
15
16 select @rows=@@rowcount
17 select @counter=1
18 select @crow=0
19 while @counter<@rows
20 begin
21 update #tb
22 set a=@crow,@crow=@crow+1
23 where id=@counter and b ='y'
24
25 SELECT @counter=@counter+1
26 end
朋友们有什么更高效,更合适的写法,可以晒出来交流下。
=======
另 case when的两种写法:
SELECT A=CASE WHEN <CONDITION> THEN <STATEMENTS> [ELSE <STATEMENTS>] END FROM tableName
SELECT A= CASE <EXPRESSION> WHEN <value or expression> THEN <STATEMENTS> [ELSE <STATEMENTS>] END FROM tableName