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

如何计算一条数据中值不为空的个数

2012-11-01 
怎么计算一条数据中值不为空的个数bus1bus2bus3bus4bus5bus6巴士1巴士二一条数据中有6个列,我希望算出这个

怎么计算一条数据中值不为空的个数
bus1 bus2 bus3 bus4 bus5 bus6
  巴士1 巴士二  


一条数据中有6个列,我希望算出这个6个列中有值或不为空的总数为2?请问大侠门要怎么写?

[解决办法]

SQL code
--只會這一種復雜的方法select    *,(case when isnull(bus1,'')='' then 0 else 1 end)    +(case when isnull(bus2,'')='' then 0 else 1 end)    +(case when isnull(bus3,'')='' then 0 else 1 end)    +(case when isnull(bus4,'')='' then 0 else 1 end)    +(case when isnull(bus5,'')='' then 0 else 1 end)    +(case when isnull(bus6,'')='' then 0 else 1 end) 总数from 你的表;
[解决办法]
--创建测试数据:
 go
 if OBJECT_ID('tbl')is not null
 drop table tbl
 go
 create table tbl(
 col1 varchar(5),
 col2 varchar(5),
 col3 varchar(5),
 col4 varchar(5),
 col5 varchar(5),
 col6 varchar(5),
 col7 varchar(5),
 col8 varchar(5)
 )
 
insert tbl
 select '1',null,'2',null,'3','4','5','6' union all
 select '1','2','3',null,null,null,null,'4' union all
 select '1','2',null,'3','4','5','6','7' union all
 select '1',null,null,'2','3',null,'4',null
 --静态实现方法
 --"+"想加统计各个“case when else”的结果来达到目的:
 select *, 
case when col1 is not null then 1 else 0 end+
 case when col2 is not null then 1 else 0 end+
 case when col3 is not null then 1 else 0 end+
 case when col4 is not null then 1 else 0 end+
 case when col5 is not null then 1 else 0 end+
 case when col6 is not null then 1 else 0 end+
 case when col7 is not null then 1 else 0 end+
 case when col8 is null then 1 else 0 end as notnull
 from tbl
 
--动态实现方法
 

declare @str varchar(max)
 set @str=''
 select @str= @str+'+ case when ' + name +' is not null then 1 else 0 end'+char(13)+char(10)
 
--char(13)+char(10)实现换行
 from syscolumns where id = OBJECT_ID('tbl')
 --print @str
 set @str='select *,'+@str+' as notnull from tbl'
 --print @str
 exec(@str)
 


/*
 j结果:
 col1 col2 col3 col4 col5 col6 col7 col8 notnull
 1 NULL 2 NULL 3 4 5 6 5
 1 2 3 NULL NULL NULL NULL 4 3
 1 2 NULL 3 4 5 6 7 6
 1 NULL NULL 2 3 NULL 4 NULL 5
 */


献丑了

热点排行