需要帮助!这是问题所在:
交易表(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中选择相应的分组值。例如:
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中运行动态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很少是必需的。通常最好找到一种更简单的方法来解决问题。