并列缩减两列在oracle中不是用表达式分组的

问题描述 投票:0回答:1

我试着将两列并列,并使用表达式分组,但它不起作用。

SELECT employee_id,
  employee_name,
  employee_unique
FROM
  (SELECT a.id AS employee_id,
    (a.first_name
    || a.last_name) AS employee_name,
    b.employee_unique
  FROM A a
  INNER JOIN b
  ON a.id=b.employee_id
  GROUP BY a.id,
    b.employee_unique,
    (a.first_name
    || a.last_name)
  );
oracle group-by aggregate
1个回答
1
投票

"不能用 "是什么意思?对我来说是行得通的(不过,由于我没有你的表,我用了Scott的 EMPDEPT但其他的都差不多)。) 如果它不正确,你应该解释一下。什么 是错误的。如果你想让我们使用你的数据,请提供 CREATE TABLEINSERT INTO 样本数据。

SQL> select employee_id,
  2         employee_name,
  3         employee_unique
  4  from
  5    (select a.empno          as employee_id,
  6            a.ename || a.job as employee_name,
  7            b.dname          as employee_unique
  8    from emp a
  9    inner join dept b
 10       on a.deptno=b.deptno
 11    group by a.empno,
 12             b.dname,
 13             a.ename || a.job
 14    );

EMPLOYEE_ID EMPLOYEE_NAME       EMPLOYEE_UNIQU
----------- ------------------- --------------
       7654 MARTINSALESMAN      SALES
       7876 ADAMSCLERK          RESEARCH
       7566 JONESMANAGER        RESEARCH
       7698 BLAKEMANAGER        SALES
       7844 TURNERSALESMAN      SALES
       7369 SMITHCLERK          RESEARCH
       7788 SCOTTANALYST        RESEARCH
       7900 JAMESCLERK          SALES
       7902 FORDANALYST         RESEARCH
       7782 CLARKMANAGER        ACCOUNTING
       7934 MILLERCLERK         ACCOUNTING
       7499 ALLENSALESMAN       SALES
       7521 WARDSALESMAN        SALES
       7839 KINGPRESIDENT       ACCOUNTING

14 rows selected.

SQL>

不过,由于没有真正的分组(这里没有聚合),你可以使用 distinct (不含 group by 子句)并得到相同的结果。

select employee_id,
       employee_name,
       employee_unique
from
  (select distinct
          a.empno          as employee_id,
          a.ename || a.job as employee_name,
          b.dname          as employee_unique
  from emp a
  inner join dept b
     on a.deptno=b.deptno
  );

0
投票

Oracle数据重述一般使用指南了解使用Oracle数据重述的使用指南很重要。

不要在SQL语句中的GROUP BY子句中使用的SQL表达式中包含任何经过编辑的列。甲骨文不支持这样做,并会引发 ORA-00979:不是 GROUP BY 表达式错误。发生这种情况是因为在内部,SELECT列表中的表达式必须被Data Redaction修改,但这导致在处理GROUP BY子句时不再找到它(当前没有被Data Redaction更新),导致这个非预期的错误信息。

不要在SQL语句中的DISTINCT子句和ORDER BY子句中同时使用的SQL表达式中包含任何经过编辑的列。Oracle不支持这样做,并引发一个错误。ORA-01791: not a SELECTed expression. 发生这种情况的原因是,内部必须通过Data Redaction修改SELECT列表中的表达式,但这导致在处理GROUP BY子句时不再找到它,从而导致了这个非预期的错误信息。

一个ORA-28094: 如果一个查询涉及一个被删节列的UNION,并且UNION的每个分支没有相同的删节策略,就会引发SQL构造不被数据重述支持的错误。为了避免出现ORA-28094错误,请确保查询具有以下属性。

当UNION中的列有一个节录策略时,UNION的每个分支中对应的列必须使用一个节录策略,它的所有属性都有相同的值。

函数类型

功能参数或REGEXP参数

政策表述

启用标志

它可以是不同的节录策略,但所有这些属性必须是相同的。

在内联视图中,UNION不能有子查询或任何涉及到删节列的SQL表达式。

母题。使用Oracle数据重删与Oracle数据库功能

© www.soinside.com 2019 - 2024. All rights reserved.