Oracle SQL - 在一个表中使用列名作为另一个表中的查询参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle SQL - 在一个表中使用列名作为另一个表中的查询参数相关的知识,希望对你有一定的参考价值。
需要帮助!这是问题所在:
- 我有2个表(一个事务,一个查找/控制)如下:
交易表(A):
TXID, NAME, DESCRIPTION, GROUP, DATE, TYPE, AMOUNT, etc.
(例如12345, 'SAMPLE TRANSACTION','test','TXGROUP1','FEB.15 2019',500.00, etc.
)
查找/控制表(B):
COLID, COLNAME, FLAG
(例如1,'NAME', 0; 2,'DATE',1, etc.
)
- 在这种情况下,表B中COLUMN的条目引用表A中的实际列名称(i.i.qazxsw poi指的是A.DATE)
问题是,我需要编写一个查询来获取表B中的所有COLUMN值,并从表A中选择相应的分组值。例如:
- 因为
B.COLNAME = 'DATE'
包含'DATE',B.COLNAME
我尝试过的:
select max (DATE) from table A grouping by A.NAME
- 但这只给了我列名的字面值 - (即
select NAME, (SELECT column_name FROM all_tab_columns where table_name like '%TABLE_A%' AND ROWNUM = 1 GROUP BY COLUMN_NAME) AS COL from TABLE_A;
) - 不是我实际需要的派生值,如果我手动运行查询将是'SAMPLE TRANSACTION', 'DATE'
我可能会期待类似的东西:
select NAME, DATE AS COL from TABLE_A;
(例如NAME, COL
)
- 理想情况下,如果可能的话,我只尝试在原始SQL中执行此操作(即没有存储过程,PL / SQL,动态等等)但是......我绝对愿意接受任何可以使其工作的东西。
- 非常感谢输入和/或建议。环境是Oracle 11g我相信,虽然我怀疑这可能不会产生巨大的差异。
可以在SQL中运行动态SQL,但解决方案很痛苦。最简单的方法是使用'SAMPLE TRANSACTION', 'FEB.15 2019'
包,不需要任何额外的PL / SQL对象。
以下示例有效,但不切实际。真正的版本必须处理许多类型转换问题,检索其他值等。
DBMS_XMLGEN
结果基于此示例模式:
--Read a value based on the CONTROL table.
select
to_number(extractvalue(xml, '/ROWSET/ROW/COL')) COL
from
(
select xmltype(dbms_xmlgen.getxml(v_sql)) xml
from
(
select 'select '||colname||' col from transaction' v_sql
from control
)
);
COL
---
2
如果您有更复杂的查询需求,例如,如果您需要返回未知数量的列,则需要安装类似我的开源程序--Sample schema:
create table control
(
COLID number,
COLNAME varchar2(4000),
FLAG number
);
insert into control values(1,'NAME',1);
create table transaction
(
TXID number,
NAME varchar2(100),
DESCRIPTION varchar2(4000),
the_GROUP varchar2(100),
the_DATE date,
TYPE varchar2(100),
AMOUNT number
);
insert into transaction values(1,2,3,4,sysdate,6,7);
commit;
。该程序允许SQL中的动态SQL,但它需要首先安装一些新对象。
实际上,这种级别的动态SQL很少是必需的。通常最好找到一种更简单的方法来解决问题。
以上是关于Oracle SQL - 在一个表中使用列名作为另一个表中的查询参数的主要内容,如果未能解决你的问题,请参考以下文章
雪花数据库:想要使用表中列的值作为另一个表的选择语句中的列名