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

计算1-30列中所有行中不等于空的算法解决方法

2012-04-03 
计算1-30列中所有行中不等于空的算法我用dbgrideh控件填充数据库no1-no30字段的数据后,要计算出这些字段所

计算1-30列中所有行中不等于空的算法
我用dbgrideh控件填充数据库no1-no30字段的数据后,要计算出这些字段所有不等于空的行数,并把计算结果加入对应列的页脚,代码如下:但得不到我要的结果,请大家帮忙看一下代码有什么问题?怎样修改才能达到我要的结果。
var
i,j:integer;
begin
ADODataSetFenbu.DisableControls;
for j := 1 to 30 do
  begin
  i := 0;
  ADODataSetFenbu.first;
  while not ADODataSetFenbu.eof do
  begin
  if ADODataSetFenbu.FieldByName('No'+inttostr(j)).AsString <> '' then
  i := i + 1;
  ADODataSetFenbu.next;
  end; 
  DBGridEhFenbu.columns[j].footers[0].valuetype := fvtStatictext; 
  DBGridEhFenbu.columns[j].footers[0].value := inttostr(i); 
  end;
ADODataSetFenbu.EnableControls;
end;

[解决办法]
应该没问题,可能是字段有空格的情况,没排除到
可以直接用SQL查詢得到,要排除空格就加上ltrim()

select count(1) cnt1 from t where len(isnull(No1,''))<>0

select sum(case when len(isnull(No1,''))=0 then 0 else 1 end) as cnt1,
sum(case when len(isnull(No2,''))=0 then 0 else 1 end) as cnt2,
...
from t

热点排行