我有一个返回此
的查询SELECT COLNAME FROM TABLE_1 WHERE CATALOG_ID = 40;
COLNAME
----------------
CONVERTED_VALUE
CONVERTED_VALUE_01
CONVERTED_VALUE_02
CONVERTED_VALUE_03
VALUE_DESCRIPTION
我需要将此结果转换为类似下一个的查询:
SELECT CONVERTED_VALUE, CONVERTED_VALUE_01, CONVERTED_VALUE_02,
CONVERTED_VALUE_03 , VALUE_DESCRIPTION
FROM TABLE2 WHERE CATALOG_ID = 40;
可以在单个查询中执行此操作,例如我不知道
SELECT( SELECT COLNAME FROM TABLE_1 WHERE CATALOG_ID = 40 )
FROM TABLE_2 WHERE CATALOG_ID = 40;
很明显,这不起作用但是想法:)
我真的不知道如何实现这个目标。有什么建议吗?我不是专家 使用数据库:(
我正在使用Oracle 10,
这个想法基本上是将第一个查询的结果转换为第二个查询的参数。
答案 0 :(得分:0)
我认为这是您正在寻找的,只要我对您的问题的理解是正确的:
SELECT
t.CONVERTED_VALUE,
t.CONVERTED_VALUE_01,
t.CONVERTED_VALUE_02,
t.CONVERTED_VALUE_03,
t.VALUE_DESCRIPTION
FROM
(SELECT COLNAME FROM TABLE_1 WHERE CATALOG_ID = 40) t,
TABLE_2
WHERE TABLE_2.CATALOG_ID = 40;
如果我不理解您的要求,请告诉我。
答案 1 :(得分:0)
这就是我想到的。但是从匿名块中激活select语句看起来不太好。
DECLARE
V_COL VARCHAR2(100):='';
s_ql VARCHAR2(200):='';
BEGIN
SELECT LISTAGG(COLNAME,',') WITHIN GROUP(ORDER BY COLNAME) AS COL INTO V_COL FROM TABLE_1 WHERE CATALOG_ID = 40 group by CATALOG_ID;
s_ql:='SELECT '||V_COL||' FROM TABLE2 WHERE CATALOG_ID = 40';
EXECUTE IMMEDIATE (s_ql);
END
您可以使用某个变量或集合来捕获结果并使用 DBMS_OUTPUT 显示它。
答案 2 :(得分:0)
select语句的返回格式与我们需要提供的列名格式不匹配,所以我猜不可能:(