首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从名称为另一个表的值的表列中获取数据

从名称为另一个表的值的表列中获取数据
EN

Stack Overflow用户
提问于 2019-06-12 09:01:16
回答 1查看 69关注 0票数 1

我需要从主表中获取列,我需要获取的列列表将位于不同users.This的元数据表中,因为每个用户可能没有相同数量的列要获取,因此需要是动态的。

元数据表

代码语言:javascript
复制
User    short_desc
rk      sector
rk      Industry
pa      sector
pa      Industry
pa      Subindustry

主数据表

代码语言:javascript
复制
ID          sector              Industry                  Subindustry
594918104   Technology          Information Technology    CyberSecurity
G0464B107   Financial Services  Financials                Banks

当从元表中选择用户rk时,当选择用户pa时,我只想获得扇区和行业,我也希望只获得扇区、行业和子行业字段。

尝试从另一个解决方案,但这不是动态的。

代码语言:javascript
复制
SELECT t2.user_id,
       t1.attr_name,
       CASE
          WHEN t1.attr_path = 'str1' THEN t2.str1
          WHEN t1.attr_path = 'str2' THEN t2.str2
       END
          col_sel
  FROM metadata t1 INNER JOIN class t2 ON t1.org_id = t2.org_id
 WHERE t1.org_id = 1

当从元表中选择用户rk时,当选择用户pa时,我只想获得扇区和行业,我也希望只获得扇区、行业和子行业字段。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-12 09:14:33

一种选择是使用返回引用游标的函数。

测试用例:

代码语言:javascript
复制
SQL> select * from metadata;

C_ SHORT_DESC
-- --------------------
rk sector
rk industry
pa industry
pa sector
pa subindustry

SQL> select * from master_data;

ID         SECTOR          INDUSTRY             SUBINDUSTRY
---------- --------------- -------------------- ---------------
5949       technology      information tech     cyber security
g046       financial       financials           banks

功能:

代码语言:javascript
复制
SQL> create or replace function f_meta (par_user in varchar2)
  2    return sys_refcursor
  3  is
  4    l_str varchar2(200);
  5    rc    sys_refcursor;
  6  begin
  7    select listagg(short_desc, ', ') within group (order by null)
  8      into l_str
  9      from metadata
 10      where c_user = par_user;
 11
 12    l_str := 'select ' || l_str ||' from master_data';
 13
 14    open rc for l_str;
 15    return rc;
 16  end;
 17  /

Function created.

测试:

代码语言:javascript
复制
SQL> select f_meta('rk') from dual;

F_META('RK')
--------------------
CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

INDUSTRY             SECTOR
-------------------- ---------------
information tech     technology
financials           financial


SQL> select f_meta('pa') from dual;

F_META('PA')
--------------------
CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

INDUSTRY             SECTOR          SUBINDUSTRY
-------------------- --------------- ---------------
information tech     technology      cyber security
financials           financial       banks


SQL>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56558355

复制
相关文章

相似问题

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