是否可以编写一个基于条件返回一组列的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
答案 0 :(得分:1)
您可以使用动态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。