我试图从 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 子句中不被识别为标识符。它也不会识别price
或quantity
使用您当前的查询,因为那些不在被透视的投影中,因为计算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] 删除。
我来说两句