[英]Convert column name as Column Value
我有个问题。 有 2 个表(配置和数据)。
我想从配置表中获取 select 值并将其用作 data.table 中的列名。
即)通过从 x_config 中选择 id=1,我想得到 A,B,C
我可以使用 cursor 从 x_config 获取列名,并可以将该值传递给我的过程中的另一个查询,但我想知道是否有任何其他方法可以在单个查询中实现这一点。
create table ABC
(
name varchar2(20),
age number,
phone number
);
Insert into ABC Values('A',10,1111);
Insert into ABC Values('B',20,1122);
Insert into ABC Values('C',30,3333);
create table x_config
(
col varchar2(20),
id number
);
Insert into x_config Values('name',1);
Insert into x_config Values('age',2);
Insert into x_config Values('phone',3);
select col from x_config where id=1;
提前致谢!
另一种方法是使用动态SQL; 一种方法是利用 XML 技巧:
select xml.result
from x_config xc
cross apply xmltable('/ROWSET/ROW'
passing dbms_xmlgen.getxmltype(
'select ' || xc.col || ' as result from abc'
)
columns result
) xml
where xc.id = 1;
结果 |
---|
一种 |
乙 |
C |
dbms_xmlgen
调用使用查找表中的列名生成动态语句,并将结果作为 XML 文档获取。 然后将其用作提取值的 XMLTable 的源。
您可以一次获得多个值,但您需要知道有多少,因此columns
子句匹配。 而且您无法获得结果集的原始列名; 我认为你需要一种不同形式的动态 SQL 和一个参考 cursor。
您可以使用CASE
表达式:
SELECT CASE (SELECT col FROM x_config WHERE id = 1)
WHEN 'name'
THEN name
WHEN 'age'
THEN TO_CHAR(age)
WHEN 'phone'
THEN TO_CHAR(phone)
END AS value
FROM abc
其中,对于您的示例数据,输出:
价值 一种 乙 C
db<> 在这里摆弄
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.