oracle sql中的pivot时出现无效标识符错误

阿米特纳延

我试图从 order_tbl 调整销售额(即数量*价格),但得到

“ORA-00904:“销售”无效标识符”。

任何人都可以帮助以下sql有什么问题吗?

SELECT order_pay, product_id, (quantity * price) as sales
          FROM order_tbl
       PIVOT (SUM (sales) FOR order_pay IN ('01-MAY-2015', '02-MAY-2015'))

创建表和插入数据的脚本如下。

CREATE TABLE ORDER_TBL
(
  ORDER_PAY   DATE,
  ORDER_ID    VARCHAR2(10 BYTE),
  PRODUCT_ID  VARCHAR2(10 BYTE),
  QUANTITY    NUMBER(5),
  PRICE       NUMBER(5)
)
Insert into ORDER_TBL
   (ORDER_PAY, ORDER_ID, PRODUCT_ID, QUANTITY, PRICE)
 Values
   (TO_DATE('5/1/2015', 'MM/DD/YYYY'), 'ORD1', 'PROD1', 5, 5);
Insert into ORDER_TBL
   (ORDER_PAY, ORDER_ID, PRODUCT_ID, QUANTITY, PRICE)
 Values
   (TO_DATE('5/1/2015', 'MM/DD/YYYY'), 'ORD2', 'PROD2', 2, 10);
Insert into ORDER_TBL
   (ORDER_PAY, ORDER_ID, PRODUCT_ID, QUANTITY, PRICE)
 Values
   (TO_DATE('5/1/2015', 'MM/DD/YYYY'), 'ORD3', 'PROD3', 10, 25);
Insert into ORDER_TBL
   (ORDER_PAY, ORDER_ID, PRODUCT_ID, QUANTITY, PRICE)
 Values
   (TO_DATE('5/1/2015', 'MM/DD/YYYY'), 'ORD4', 'PROD1', 20, 5);
Insert into ORDER_TBL
   (ORDER_PAY, ORDER_ID, PRODUCT_ID, QUANTITY, PRICE)
 Values
   (TO_DATE('5/2/2015', 'MM/DD/YYYY'), 'ORD5', 'PROD3', 5, 25);
Insert into ORDER_TBL
   (ORDER_PAY, ORDER_ID, PRODUCT_ID, QUANTITY, PRICE)
 Values
   (TO_DATE('5/2/2015', 'MM/DD/YYYY'), 'ORD7', 'PROD1', 2, 5);
Insert into ORDER_TBL
   (ORDER_PAY, ORDER_ID, PRODUCT_ID, QUANTITY, PRICE)
 Values
   (TO_DATE('5/2/2015', 'MM/DD/YYYY'), 'ORD8', 'PROD5', 1, 50);
Insert into ORDER_TBL
   (ORDER_PAY, ORDER_ID, PRODUCT_ID, QUANTITY, PRICE)
 Values
   (TO_DATE('5/2/2015', 'MM/DD/YYYY'), 'ORD9', 'PROD6', 2, 50);
Insert into ORDER_TBL
   (ORDER_PAY, ORDER_ID, PRODUCT_ID, QUANTITY, PRICE)
 Values
   (TO_DATE('5/2/2015', 'MM/DD/YYYY'), 'ORD10', 'PROD2', 4, 10);
Insert into ORDER_TBL
   (ORDER_PAY, ORDER_ID, PRODUCT_ID, QUANTITY, PRICE)
 Values
   (TO_DATE('5/2/2015', 'MM/DD/YYYY'), 'ORD6', 'PROD4', 6, 20);
COMMIT;
亚历克斯·普尔

列别名不能在同一级别的查询中使用,因此sales在 pivot 子句中不被识别为标识符。它也不会识别pricequantity使用您当前的查询,因为那些不在被透视的投影中,因为计算sales在那里 - 这似乎有点矛盾。

正如评论中提到的,您可以更改查询以直接在数据透视子句中进行聚合(因此您不会sales作为单独的值进行计算,并在初始选择列表中获取两个基列),但这不起作用或者,除非您使用内联视图:

SELECT *
FROM (
  SELECT order_pay, product_id, quantity, price
  FROM order_tbl
)
PIVOT (SUM (quantity * price) FOR order_pay IN ('01-MAY-2015', '02-MAY-2015'))

数据库<>小提琴

如果您特别希望能够sales在 pivot 子句中进行引用,那么您可以sales在内联视图中进行该计算:

SELECT *
FROM (
  SELECT order_pay, product_id, (quantity * price) as sales
  FROM order_tbl
)
PIVOT (SUM (sales) FOR order_pay IN ('01-MAY-2015', '02-MAY-2015'))

但是 '01-MAY-2015' 是一个字符串,而不是一个日期,因此您依赖于隐式转换和 NLS 设置;最好使用日期文字:

SELECT *
FROM (
  SELECT order_pay, product_id, (quantity * price) as sales
  FROM order_tbl
)
PIVOT (SUM (sales) FOR order_pay IN (DATE '2015-05-01', DATE '2015-05-02'))

当然,您也可以在枢轴子句中为枢轴列提供更友好的别名,并对结果进行排序,以获得类似的结果:

产品编号 5月01日 五月02
生产线1 125 10
生产线2 20 40
生产线3 250 125
产品4 空值 120
生产线5 空值 50
生产线6 空值 100

数据库<>小提琴

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

oracle sql无效标识符错误

Oracle SQL中的无效标识符

尝试在 Oracle SQL 开发人员中创建两个表之间的关系时出现无效标识符错误?

oracle sql 表创建错误 %s: 无效标识符"

尝试创建表时 Oracle SQL“无效标识符错误”

Oracle无效标识符错误

在Oracle中的存储过程中获取无效的标识符和SQL忽略的错误

无效的标识符Oracle SQL Dev

嵌套WITH子查询中的Oracle SQL无效标识符错误

oracle查询中的无效标识符

Oracle:无效的标识符

Oracle中的标识符错误

正在获取SQL错误:ORA-00904:“状态”:在oracle中使用连接时标识符无效

Oracle:按别名排序,无效标识符错误

Oracle,合并时显示“无效标识符”

SQL Oracle“无效标识符”和“表不存在”错误

Oracle sql 连接计数给了我 00904 的错误。00000 - "%s: 无效标识符

Oracle PL / SQL ORA-00904无效的标识符

Oracle SQL 中部门 ID 的无效标识符

Sql上的无效标识符左加入oracle

选择当前时间戳时,Oracle中的标识符无效

Oracle 11g查询中的无效标识符

子查询中的Oracle无效标识符

Oracle-列名的无效标识符

创建一个带有外键的表会出现错误 ORA-00904: : oracle 10g 中的无效标识符

Oracle SQL:使用 Xmlagg 进行选择时缺少标识符错误

Oracle PL/SQL 过程标识符必须声明错误

如何克服基本插入上的持久性oracle“无效标识符”错误?

我的 Oracle Apex 查询之一收到“无效标识符错误”