首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于输入返回不同列值的函数。

基于输入返回不同列值的函数。
EN

Stack Overflow用户
提问于 2019-07-19 14:52:18
回答 4查看 118关注 0票数 1

这是一张桌子-

代码语言:javascript
复制
FILTER  A   B   C
Apple   0   3   6
Orange  1   4   7
Apricot 2   5   8

是否可以为苹果(0)、橙(4)和杏(8)返回A列?

代码语言:javascript
复制
SELECT Fruit_Function('Apple') FROM dual; --RESULT 0.
SELECT Fruit_Function('Orange') FROM dual; --RESULT 4.
SELECT Fruit_Function('Apricot') FROM dual; --RESULT 8.

现在我有一个这样的功能

代码语言:javascript
复制
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;

此函数返回列名,但不返回实际值。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-07-19 15:06:08

创建一个视图!

代码语言:javascript
复制
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;

然后,对包中的查询使用视图。

还可以将该列作为计算列直接添加到表中:

代码语言:javascript
复制
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);

使用这种方法,列看起来像是表的一部分。

票数 2
EN

Stack Overflow用户

发布于 2019-07-19 15:00:26

可以使用case表达式

代码语言:javascript
复制
SELECT
    CASE filter WHEN 'Apple' THEN A WHEN 'Orange' THEN B WHEN 'Apricot' THEN C END AS result
FROM
    myTable

如果您想重用它的时间,请从它创建一个视图并输出所有其他列。

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2019-07-19 15:01:56

您可以在函数中使用下面的逻辑

代码语言:javascript
复制
Function(input)
Begin
If(input =='Apple')
Select A from table name
Else if(input =='something')
Select B from table name
....
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57114958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档