怎样实现根据表的属性值的集合返回对应的数值?改用那些SQL语句实现?求高手解答,感激不尽!!

解决方案 »

  1.   

    譬如某表 py_type   py_rt   py_hs   py_jz
               1        1,2    1,2    1,2
               1        2,3    2,3    2,3大致要求:由集合(1,"py_rt",1)返回某数值1;
              由集合(1,"py_rt",2)也返回某数值1 类推。         
      

  2.   

    暂时自己用的标量值函数解决的,一种是:alter function my_function1(@dy_type int,@dy_name varchar(30))
    returns int
    as
    begin
    declare @result int
    declare @isdel int
    select @isdel=isdel from tdxdb_test
    select @result=
    case
      when @dy_type=dy_type and @dy_name=dy_tdx and @isdel=0 then '1'
      when @dy_type=dy_type and @dy_name=dy_dd  and @isdel=0 then '2'
      when @dy_type=dy_type and @dy_name=dy_hs  and @isdel=0 then '3'
      when @dy_type=dy_type and @dy_name=dy_jsd  and @isdel=0 then '4'
      when @dy_type=dy_type and @dy_name=dy_jz  and @isdel=0 then '5'
    else '-1'
    end
    from tdxdb_test
    return @result
    end可查询结构总返回-1 
    是我函数写的有问题还是标量函数体用不了CASE WHEN THEN??
    求高人指点,小弟感激不尽!
      

  3.   

    declare @dy_type int,@dy_name varchar(30)
    set @dy_type=1
    set @dy_name='py_rt'declare @sql varchar(max)
    set @sql=''
    set @sql='selct 
    from tdxdb_test
    where py_type='+cast(@dy_type as varchar)+'
    and '+@dy_name+'='+cast(@dy_type as varchar);
    exec(@sql)
      

  4.   

    eclare @dy_type int,@dy_name varchar(30),@dy_name_value int
    set @dy_type=1
    set @dy_name='py_rt'
    set @dy_name_value=1declare @sql varchar(max)
    set @sql=''
    set @sql='select *
    from tdxdb_test
    where py_type='+cast(@dy_type as varchar)+'
    and '+@dy_name+'='+cast(@dy_name_value as varchar);
    -- print @sql
    exec(@sql)
    刚才没有检查,修改再提交了
      

  5.   

    谢谢大家的帮忙,已解决:alter function Tdx_test(@dy_type int,@dy_name varchar(8),@dy_fw varchar(30))
    returns varchar(4)
    as
    begin
    declare @result varchar(4)if @dy_name='dd'
    begin
    select @result=dy_tdx from tdxdb_test
    where @dy_type=dy_type and @dy_fw=dy_dd and isdel=0
    endif @dy_name='hs'
    begin
    select @result=dy_tdx from tdxdb_test
    where @dy_type=dy_type and @dy_fw=dy_hs and isdel=0
    end if @dy_name='jsd'
    begin
    select @result=dy_tdx from tdxdb_test
    where @dy_type=dy_type and @dy_fw=dy_jsd and isdel=0
    end if @dy_name='jz'
    begin
    select @result=dy_tdx from tdxdb_test
    where @dy_type=dy_type and @dy_fw=dy_jz and isdel=0
    end 
    return @result
    end