求教一条sql循环语句
目前有个表为tb,里面有这样一些字段
id q11 q12 q13 q14 q21 q22 q23 q24.............q91 q92 q93 q94 total
1 10 11 8 true 1 2 5 true............2 4 8 false 0
2 8 6 7 true 2 5 5 false...........5 6 3 true 0
........
........
现在想用一个字段total用来统计值为true(字段为q14,q24......q94)的个数,并更新到total字段(默认值为0)中,如何实现最方便?谢谢回复
[解决办法]
declare @sql varchar(8000)
set @sql= ' '
select @sql=@sql+ '+(case '+name+ ' when ' 'ture ' ' then 1 else 0 end) '
from syscolumns where id=object_id( 'tb ') and name like 'q__ '
set @sql= 'update tb set total= '+stuff(@sql,1,1, ' ')
exec(@sql)
[解决办法]
paoluo(一天到晚游泳的鱼)是对的.
使用case when
[解决办法]
--改一下子陌的...
declare @sql varchar(8000)
set @sql= ' '
select @sql=@sql+ '+(case '+name+ ' when ' 'true ' ' then 1 else 0 end) '
from syscolumns where id=object_id( 'tb ') and RIGHT(name,1)= '4 '
set @sql= 'update tb set total= '+stuff(@sql,1,1, ' ')
exec(@sql)
[解决办法]
錯了,改下
Update
tb
Set
total = oldtotal - (Case When q14 = 'true ' Then 1 Else 0 End) -
(Case When q24 = 'true ' Then 1 Else 0 End) -
(Case When q34 = 'true ' Then 1 Else 0 End) -
(Case When q44 = 'true ' Then 1 Else 0 End) -
(Case When q54 = 'true ' Then 1 Else 0 End) -
(Case When q64 = 'true ' Then 1 Else 0 End) -
(Case When q74 = 'true ' Then 1 Else 0 End) -
(Case When q84 = 'true ' Then 1 Else 0 End) -
(Case When q94 = 'true ' Then 1 Else 0 End)
或者
declare @sql varchar(8000)
set @sql= ' '
select @sql=@sql+ '-(case '+name+ ' when ' 'ture ' ' then 1 else 0 end) '
from syscolumns where id=object_id( 'tb ') and name like 'q_4 '
set @sql= 'update tb set total= oldtotal ' + @sql
exec(@sql)