是否可以选择如果/案例



是否可以编写一个基于条件返回一组列的 sql 查询? 下面是一个示例查询:

Select 
    id
    ,name
    ,col3
From 
Table A
,left outer join (If (select col6 from table D =='A')
 {
     Select col3,col4,col5 as id
      From Table A
      ,left join table C
      ,left join
  }
 Else If (select col6 from table D =='D')
 {
   Select Col1, Col3 as id
    From Table A
  } ) as temp_tab on temp_tab.id = table A.id
,left outer join Table R on table R.name = table A.name
where id = 129

您可以使用动态 SQL 或 ref 游标执行此操作,这意味着过程方法。因此,您需要清楚您要做什么以及希望获得什么好处。这尤其会影响代码的调用方式。

如果你需要一个纯SQL方法,你可以尝试这样的东西。内联视图(temp_tab(的投影是静态的,但其实际值根据d.col6的内容而变化。

select 
    x.id
    ,x.name
    ,temp_tab.col3
    ,temp_tab.col4
    ,temp_tab.id
from x
left outer join 
 (
     select case 
                when d.col6 = 'A' then a.col3 
                when d.col6 = 'D' then a.col1
                else null 
            end as col3
            ,case 
                when d.col6 = 'A' then c.col4
                else null
             end as col4
            ,case 
                when d.col6 = 'A' then a.col5 
                when d.col6 = 'D' then a.col3
                else null
             end as id
      from d
           cross join a
           left outer join c on a.whatever = c.whatever
      where (d.col6 = 'D' or c.whatever is not null)      
 ) as temp_tab on temp_tab.id = x.id
where x.id = 129

根据您的确切要求,这可能足以满足您的需求,但显然这是一个非常笨拙的解决方案。动态更改 FROM 子句中的表或 WHERE 子句中的条件是棘手到不可能的:如果需要这样做,您正在考虑使用动态 SQL。

相关内容

最新更新