如果不存在a,取b的值,否则取a的值select decode(a, null, b, a) from table
我的意思是这样的 table的结构可能是 a、b两个字段组成,也可能是由a、c两个字段组成,b和c只可能是其中的一个,但是现在我不知道字段名是b还是c, 如果用select a,b from table的话,如果表是由字段名是a、c组成的,那么肯定会报错,同理如果用select a,c from table而表是由a,b组成的话,也会报错, 如何写一SQL能在不确定表中字段具体名称的情况下列出其各字段的值呢?(不是要用*的方式,要将字段名写在select中)
用动太语句,查询表结果。结合select * from user_tab_columns这个。。
看下面的例子,在scott.emp上进行的测试。假设emp表上有B字段,就取empno,否则取ename字段。 select A.empno ,nvl(a.your_need, b.your_need) your_need from ( select empno ,cast( ( case when (select count(1) from user_tab_columns where table_name = 'EMP' and column_name = 'B') > 0 then empno else null end ) as varchar2(7) ) your_need from emp ) A, ( select empno ,case when (select count(1) from user_tab_columns where table_name = 'EMP' and column_name = 'ENAME') > 0 then ENAME else null end your_need from emp ) B where A.empno = B.empno
table的结构可能是 a、b两个字段组成,也可能是由a、c两个字段组成,b和c只可能是其中的一个,但是现在我不知道字段名是b还是c,
如果用select a,b from table的话,如果表是由字段名是a、c组成的,那么肯定会报错,同理如果用select a,c from table而表是由a,b组成的话,也会报错,
如何写一SQL能在不确定表中字段具体名称的情况下列出其各字段的值呢?(不是要用*的方式,要将字段名写在select中)
select A.empno
,nvl(a.your_need, b.your_need) your_need
from
(
select empno
,cast(
(
case when (select count(1) from user_tab_columns where table_name = 'EMP' and column_name = 'B') > 0 then empno
else null
end
)
as varchar2(7)
) your_need
from emp
)
A,
(
select empno
,case when (select count(1) from user_tab_columns where table_name = 'EMP' and column_name = 'ENAME') > 0 then ENAME
else null
end your_need
from emp
) B
where A.empno = B.empno