Sql ORA-00904:由所有工会订购

Sql ORA-00904:由所有工会订购,sql,oracle-sqldeveloper,Sql,Oracle Sqldeveloper,我正在创建一个带有头的平面文件。我得到一个ORA-00904错误,我想这是因为我创建的标题没有“employee_name”字段。我的假设正确吗?。 如果是,如何在没有标题的情况下对查询进行排序 我得到的错误是: ORA-00904: "employee_id":invalid identifier 我的代码: select 'FILENAME' as filerec from dual UNION ALL select 'FILEDATE: ' || to_char(sysd

我正在创建一个带有头的平面文件。我得到一个ORA-00904错误,我想这是因为我创建的标题没有“employee_name”字段。我的假设正确吗?。 如果是,如何在没有标题的情况下对查询进行排序

我得到的错误是: ORA-00904: "employee_id":invalid identifier

我的代码: select 'FILENAME' as filerec from dual UNION ALL select 'FILEDATE: ' || to_char(sysdate,'mm/dd/yyyy) as filerec from dual UNION ALL select employee_id || emloyee_name from employee_database as filerec order by employee_id;

这是我想要产生的输出: FILENAME FILEDATE: 02/27/2015 200125Ruth Chan 200126Dan Gonzales 200135Lisa Mayoral

将工会的最后一部分放在括号中可能会起到以下作用:

select 'FILENAME' as filerec from dual
UNION ALL
select 'FILEDATE: ' || to_char(sysdate,'mm/dd/yyyy) as filerec from dual
UNION ALL
(select employee_id || emloyee_name from employee_database as filerec
    order by employee_id);
编辑:由于没有固有的顺序,更好的方法是:

select 'FILENAME' as filerec from dual
, 1 sortorder    
UNION ALL
select 'FILEDATE: ' || to_char(sysdate,'mm/dd/yyyy) as filerec from dual
, 2 sortorder
UNION ALL
select employee_id || emloyee_name from employee_database as filerec
, 3 sortorder
ORDER BY sortorder, filerec;

您可能需要将其放入子查询中,因为您可能不想选择属性sortorder。

请尝试按列位置编号而不是列名排序

select 'FILENAME' as filerec from dual
UNION ALL
select 'FILEDATE: ' || to_char(sysdate,'mm/dd/yyyy) as filerec from dual
UNION ALL
select employee_id || emloyee_name from employee_database as filerec
order by 1;
或者使用别名

select 'FILENAME' as filerec from dual
UNION ALL
select 'FILEDATE: ' || to_char(sysdate,'mm/dd/yyyy) as filerec from dual
UNION ALL
select employee_id || emloyee_name as filerec from employee_database 
order by filerec;
在SQL中,不能使用复合语句按顺序命名列,必须使用列位置

或者

显式投影列

在您的例子中,由于已经连接了列,因此无法显式地投影它们,而且列位置也没有任何意义。因此,你可以玩一个小把戏。添加一个伪列,将所需值添加到要首先排序的行中,然后在第一列之后要排序的伪列中使用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>

这项命令适用于整个工会!员工id是否为有效的列名??您可以使用列编号1、2、3来代替名称。OP可能希望结果先按选择顺序显示,然后才按员工id顺序显示最后一个选择。@jarlh,我认为这是完全可能的;OP说前两个并集是标题。并集合并完整结果并对完整结果排序。不可能有详细的订单。下面是一个问题。如何编写包含详细信息总数的预告片记录: