首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求教一条sql循环语句解决方法

2012-03-19 
求教一条sql循环语句目前有个表为tb,里面有这样一些字段idq11q12q13q14q21q22q23q24.............q91q92q9

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

热点排行