ORA-00904:与UNION ALL一起订购

Mar*_*ong 4 sql oracle-sqldeveloper

我正在创建带有标头的平面文件。我收到一个ORA-00904错误,我认为这是因为我创建的标头中没有字段'employee_name'(我对此假设是否正确?)。如果是,如何在没有标题的情况下对查询进行排序?

我得到的错误:

    ORA-00904:“员工编号”:无效的标识符
    

我的代码:

    从双选择“ FILENAME”作为filerec
    全联盟
    选择“ FILEDATE:” || to_char(sysdate,'mm / dd / yyyy)as filerec from dual
    全联盟
    选择employee_id || 来自employee_database的emloyee_name作为filerec
    按employee_id排序;
    

这是我要产生的输出:

    文档名称
    截止日期:2015年2月27日
    200125Ruth Chan
    200126丹·冈萨雷斯(Dan Gonzales)
    200135丽莎·马约拉(Lisa Mayoral)
    

Lal*_*r B 5

SQL中,不能使用复合语句命名ORDER BY中的列,而必须使用列位置

要么,

显式投影列

在您的情况下,由于已经串联了列,因此无法显式投影它们,列位置也没有任何意义。因此,您可以玩一个小把戏。向需要首先排序的行中添加一个伪列,其中包含必需的值,然后在要对其进行排序的伪列中使用 NULL值。因此,NULL总是放在排序的末尾。

例如,

SQL> SELECT filerec FROM (
  2      SELECT 'FILENAME' AS filerec, 1 col FROM dual
  3      UNION ALL
  4      SELECT 'FILEDATE: ' || to_char(SYSDATE,'mm/dd/yyyy') as filerec, 2 col FROM dual
  5      UNION ALL
  6      SELECT empno || ename AS filerec, NULL col FROM emp
  7      ORDER BY 2,1
  8  );

FILEREC
--------------------------------------------------
FILENAME
FILEDATE: 02/27/2015
7369SMITH
7499ALLEN
7521WARD
7566JONES
7654MARTIN
7698BLAKE
7782CLARK
7788SCOTT
7839KING
7844TURNER
7876ADAMS
7900JAMES
7902FORD
7934MILLER

16 rows selected.

SQL>
Run Code Online (Sandbox Code Playgroud)