select * from T_A where id in 
(case when (1=1) 
then (select 1 as id union all select 2 union all  select id from T_A) 
else (select 4 as id union all select 5 union all  select id from T_A)  
end)始终报错

解决方案 »

  1.   

    语法不对,你想实现什么功能?then (select 1 as id union all select 2 union all  select id from T_A) 有了这句,等同于全选了。
      

  2.   

    根据一个条件返回个套查询,但是嵌套查询又包换几个特殊值,所以要用union
      

  3.   

    这样吧 看这个需求
    select * from T_A where id in 
    (case when (fid>1) 
    then (select 1 as id union all select 2 ) 
    else (select 4 as id union all select 5 )  
    end)
      

  4.   

    在then或else后面再套都可
    如变量@x为 (1,2,3,4,5) 要得出1变5,2变4,3不变,4变2,5变1的数据
    为嵌套的情况为
    case when @x=1 then 5 when x=2 then 4 when x=3 then 3 when x=4 then 2 else 1 end
    嵌套的情况 
    case when @x in (1,2) then case when @x=1 then 5 else 4 end
         else case when @x=3 then 3 when x=4 then 2 else 1 end end
    与if else 的嵌套差不多,自已多试试就明白.
      

  5.   

    报错的提示是米?
    语法如下:
    语法-->简单 CASE 函数:
    CASE input_expression
        WHEN when_expression THEN result_expression
            [ ...n ]
        [ 
            ELSE else_result_expression
        ENDCASE 搜索函数:CASE
        WHEN Boolean_expression THEN result_expression
            [ ...n ]
        [ 
            ELSE else_result_expression
        END
      

  6.   


    select T_A.*
    from T_A,(select 1 as id union all select 2 ) t1,(select 4 as id union all select 5 ) t2
    where T_A.id = case when fid>1 then t1.id else t2.id end