日期:2014-05-19  浏览次数:20425 次

求教一条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)