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)
在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)