SELECT CK.RESPERSON AS NAME
    FROM CP_KPI_INFO_FY CK, CP_DIM_PROVIDER CP
   WHERE CK.PROVIDERID = CP.ID AND cp.ID=变量a我现在想做个判断,如果变量a是‘provider’,那么就改成‘cp.id’我这样写行吗?  SELECT CK.RESPERSON AS NAME
    FROM CP_KPI_INFO_FY CK, CP_DIM_PROVIDER CP
   WHERE CK.PROVIDERID = CP.ID AND (case when 变量a='provider' then 'cp.id' else {1} end)

解决方案 »

  1.   

    case when 变量a='provider' then 'cp.id' else {1} end
    这就不是判断语句,这是赋值语句,怎么能加在where后面
      

  2.   

    SELECT CK.RESPERSON AS NAME
      FROM CP_KPI_INFO_FY CK, CP_DIM_PROVIDER CP
     WHERE CK.PROVIDERID = CP.ID 
       AND CP.ID = case when 变量a='provider' then 'cp.id' else '{1}' end;
      

  3.   

    那有什么办法,在where里面加个判断吗?如果where时变量a的值是'provider'那么将变量a赋值为id。如果不是'provider',那么就保留变量a的值。再和where cp.ID做比较
      

  4.   

    3L正解,这样就是一个判断语句了,能case when 也能用decode
      

  5.   


    SELECT CK.RESPERSON AS NAME
      FROM CP_KPI_INFO_FY CK, CP_DIM_PROVIDER CP
     WHERE CK.PROVIDERID = CP.ID 
       AND CP.ID = case when 变量a='provider' then cp.id else 变量a end;
    --or
    SELECT CK.RESPERSON AS NAME
      FROM CP_KPI_INFO_FY CK, CP_DIM_PROVIDER CP
     WHERE CK.PROVIDERID = CP.ID 
       AND CP.ID = decode(变量a,'provider',cp.id,变量);
      

  6.   


    你这个 将变量a赋值为id 是要改变表记录,还是只要在where判断的时候临时用一下,如果临时用一下的话,8L正解,如果要改变表记录的话,必须要用update语句了
      

  7.   

    直接在select里面加casewhen不就可以了吗,还有别的条件?
    SELECT CK.RESPERSON AS NAME,
    case when cp.ID='provider' then cp.id else 变量a end
    FROM CP_KPI_INFO_FY CK, CP_DIM_PROVIDER CP
    WHERE CK.PROVIDERID = CP.ID  -- 2.where中判断(改成自己的表)
    select case when n.a is null then m.deptno  -- deptno是0就改为100
                else 100
           end
      from scott.dept m, 
          (select 1 a from dual) n
     where n.a(+) = (case when m.deptno = 0 then 1 else 0 end)