派生列的动态列名-ORACLE SQL
我试图使用“select from dual”在查询中设置一个动态列名。 这可能吗?如果没有,请为我推荐替代方案来实现这一点。 我需要一个普通的select查询,而不是使用存储过程 我正在尝试实现以下查询:派生列的动态列名-ORACLE SQL,sql,oracle,plsql,Sql,Oracle,Plsql,我试图使用“select from dual”在查询中设置一个动态列名。 这可能吗?如果没有,请为我推荐替代方案来实现这一点。 我需要一个普通的select查询,而不是使用存储过程 我正在尝试实现以下查询: SELECT A.NO ,A.SUB_NO ,A.DCY ,A.STATE ,NVL(TO_CHAR(M1.NUMERATOR),'0') AUG_NUM --AS SELECT TO_CHAR(ADD_MONTHS
SELECT A.NO
,A.SUB_NO
,A.DCY
,A.STATE
,NVL(TO_CHAR(M1.NUMERATOR),'0') AUG_NUM --AS SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-2),'MON')||'_NUM' FROM DUAL
,NVL(TO_CHAR(M1.DENOMINATOR),'0') AUG_DEN --AS SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-2),'MON')||'_DEN' FROM DUAL
,NVL(TO_CHAR(M2.NUMERATOR),'0') JUL_NUM --AS SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-3),'MON')||'_NUM' FROM DUAL
,NVL(TO_CHAR(M2.DENOMINATOR),'0') JUL_DEN --AS SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-3),'MON')||'_DEN' FROM DUAL
,NVL(TO_CHAR(M3.NUMERATOR),'0') JUN_NUM --AS SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-4),'MON')||'_NUM' FROM DUAL
,NVL(TO_CHAR(M3.DENOMINATOR),'0') JUN_DEN --AS SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-4),'MON')||'_DEN' FROM DUAL
,M1.M1_CALC
,M2.M2_CALC
,M3.M3_CALC
FROM A, M1,M2,M3;
提前感谢您的帮助 我敢肯定,最接近你想要的是使用
UNION-ALL
SELECT NULL no,
NULL sub_no,
NULL dcy,
NULL state,
TO_CHAR(ADD_MONTHS(SYSDATE,-2),'MON')||'_NUM' AUG_NUM,
TO_CHAR(ADD_MONTHS(SYSDATE,-2),'MON')||'_DEN' AUG_DEN,
TO_CHAR(ADD_MONTHS(SYSDATE,-3),'MON')||'_NUM' JUL_NUM,
TO_CHAR(ADD_MONTHS(SYSDATE,-3),'MON')||'_DEN' JUL_DEN,
TO_CHAR(ADD_MONTHS(SYSDATE,-4),'MON')||'_NUM' JUN_NUM,
TO_CHAR(ADD_MONTHS(SYSDATE,-4),'MON')||'_DEN' JUN_DEN,
NULL M1_CAL,
NULL M2_CALC,
NULL M3_CALC
FROM dual
UNION ALL
SELECT A.NO
,A.SUB_NO
,A.DCY
,A.STATE
,NVL(TO_CHAR(M1.NUMERATOR),'0') AUG_NUM --AS SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-2),'MON')||'_NUM' FROM DUAL
,NVL(TO_CHAR(M1.DENOMINATOR),'0') AUG_DEN --AS SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-2),'MON')||'_DEN' FROM DUAL
,NVL(TO_CHAR(M2.NUMERATOR),'0') JUL_NUM --AS SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-3),'MON')||'_NUM' FROM DUAL
,NVL(TO_CHAR(M2.DENOMINATOR),'0') JUL_DEN --AS SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-3),'MON')||'_DEN' FROM DUAL
,NVL(TO_CHAR(M3.NUMERATOR),'0') JUN_NUM --AS SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-4),'MON')||'_NUM' FROM DUAL
,NVL(TO_CHAR(M3.DENOMINATOR),'0') JUN_DEN --AS SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-4),'MON')||'_DEN' FROM DUAL
,M1.M1_CALC
,M2.M2_CALC
,M3.M3_CALC
FROM A, M1,M2,M3;
例如,读一下,。问题是executeimmediate需要PL/SQL。您是否碰巧使用了Oracle 18c?您可以使用多态表函数来实现这一点,尽管我真的怀疑这是否值得。如果你在18c,我可以给你写一个例子。否则,就不是。此外,与动态命名列的情况一样,如果客户机程序事先不知道这些名称,您需要询问它们将如何使用/使用此结果集。通常,最好保持SQL结果列为静态,并在用户界面中处理重命名。@Matthewmpeak,我在Oracle 10G上。@JCBA如果您有一个称为PL/SQL对象的普通select查询,那就足够了吗?可以在SQL中提供动态SQL,但需要先安装对象。谢谢。我尝试了这个方法,发现它只会在满足所需列名的位置插入另一行。