这是一张桌子-
FILTER A B C
Apple 0 3 6
Orange 1 4 7
Apricot 2 5 8是否可以为苹果(0)、橙(4)和杏(8)返回A列?
SELECT Fruit_Function('Apple') FROM dual; --RESULT 0.
SELECT Fruit_Function('Orange') FROM dual; --RESULT 4.
SELECT Fruit_Function('Apricot') FROM dual; --RESULT 8.现在我有一个这样的功能
CREATE OR REPLACE FUNCTION Fruit_Function (v_id integer, v_filter varchar2)
RETURN varchar2 as
v_rp varchar2(500);
BEGIN
SELECT ASSIGNEE INTO v_rp
FROM FRUITS a
WHERE a.id = v_id AND a.filter = v_filter;
RETURN v_rp;
END Fruit_Function;此函数返回列名,但不返回实际值。
发布于 2019-07-19 15:06:08
创建一个视图!
create view v_t as
select t.*,
(case when filter = 'Apple' then a
when filter = 'Orange' then b
when filter = 'Apricot' then C
end) as result
from t;然后,对包中的查询使用视图。
还可以将该列作为计算列直接添加到表中:
alter table t add result number generated always as
(case when filter = 'Apple' then a
when filter = 'Orange' then b
when filter = 'Apricot' then C
end);使用这种方法,列看起来像是表的一部分。
发布于 2019-07-19 15:00:26
可以使用case表达式
SELECT
CASE filter WHEN 'Apple' THEN A WHEN 'Orange' THEN B WHEN 'Apricot' THEN C END AS result
FROM
myTable如果您想重用它的时间,请从它创建一个视图并输出所有其他列。
CREATE OR REPLACE VIEW myTableEx
SELECT
CASE filter WHEN 'Apple' THEN A WHEN 'Orange' THEN B WHEN 'Apricot' THEN C END AS result,
filter, A, B, C, ...
FROM
myTable;发布于 2019-07-19 15:01:56
您可以在函数中使用下面的逻辑
Function(input)
Begin
If(input =='Apple')
Select A from table name
Else if(input =='something')
Select B from table name
....https://stackoverflow.com/questions/57114958
复制相似问题