本帖最后由 tianwei76 于 2012-11-08 13:58:33 编辑

解决方案 »

  1.   

    类似:你自己写31个就行了
    create function f_test (@f1 int,@f2 int ,@f3 int ,@f4 int)
    returns int as
    begin
    declare @result int
    select @result= 
    case when @f1>0 then 1 else 0 end+
    case when @f2>0 then 1 else 0 end+
    case when @f3>0 then 1 else 0 end+
    case when @f4>0 then 1 else 0 end
    return @result
    end
    go
    用的时候select * from 表 where dbo.f_test(f1,f2...f31)=10
      

  2.   

    应该是
    create function f_test (@f1 int,@f2 int ,@f3 int ,@f4 int)
     returns int as
     begin
     declare @result int
     select @result= 
     case when @f1=0 then 1 else 0 end+
     case when @f2=0 then 1 else 0 end+
     case when @f3=0 then 1 else 0 end+
     case when @f4=0 then 1 else 0 end
     return @result
     end
      

  3.   

    比如要找至少10个字段为0的,且排序select * from 表 where dbo.f_test(f1,f2...f31)>10
    order by  dbo.f_test(f1,f2...f31) desc