在表上使用 Pivot 函数时出现缺少逗号错误

Posted

技术标签:

【中文标题】在表上使用 Pivot 函数时出现缺少逗号错误【英文标题】:Getting missing comma error when using Pivot function on a table 【发布时间】:2019-10-23 09:49:06 【问题描述】:

我正在创建一个简单的枢轴,但我得到 ORA-00917:在枢轴函数存在的行(第三行)上缺少逗号错误。请帮忙。

不知道还有什么可以尝试的,因为语法似乎是正确的,因为我是枢轴函数的新手。

SELECT venue, notional
FROM ABC
pivot (sum(notional) FOR (venue) IN ('A' as A1 , 'B' as B1));

预期的结果是 A1 和 B1 显示它们各自的概念。

【问题讨论】:

【参考方案1】:

您不需要子查询。 ABC 表中的列 venuenotional 已被转置并且不再存在于输出结果集中,因此 SELECT 子句将找不到这些列。

取而代之的是 SELECT a1b1 您已旋转的列:

测试数据

CREATE TABLE abc ( id, venue, notional ) AS
SELECT 1, 'A', 1 FROM DUAL UNION ALL
SELECT 1, 'A', 2 FROM DUAL UNION ALL
SELECT 1, 'A', 3 FROM DUAL UNION ALL
SELECT 1, 'B', 1 FROM DUAL UNION ALL
SELECT 1, 'B', 2 FROM DUAL UNION ALL
SELECT 2, 'B', 3 FROM DUAL;

查询

SELECT id, a1, b1      -- you can't use venue or notional here as they've been pivoted.
FROM ABC
pivot (sum(notional) FOR (venue) IN ('A' as A1 , 'B' as B1));

输出

身份证 | A1 | B1 -: | ---: | -: 1 | 6 | 3 2 | | 3

db小提琴here

【讨论】:

【参考方案2】:

您似乎错过了 PIVOT 函数之前的子查询 -

SELECT *
FROM (SELECT venue, notional
      FROM ABC
     )
PIVOT (
        SUM(notional) FOR (venue) IN ('A' as A1 , 'B' as B1)
      );

【讨论】:

另一个与此相关的问题。我们可以在做一个数据透视时有多个 IN 子句,例如假设我想做这个 ``` PIVOT ( SUM(notional) FOR (venue) IN ('A' as A1 , 'B' as B1) AND (type ) IN ('素数')); ```` 类型是我想包含在枢轴中的另一列 您必须为此添加另一个完整的 PIVOT 子句。 ```````````````` SELECT * FROM(选择场地,type_,名义上的来自ABC)PIVOT(SUM(名义上)FOR(场地)IN(' A' 作为 A1 ,'B' 作为 B1) ) PIVOT ( SUM(notional) FOR (type_) IN ('Prime') ); `````````````````````````` 试过了,但是名义上的标识符无效 我想你可以用你的示例数据和你的预期结果发布新问题。

以上是关于在表上使用 Pivot 函数时出现缺少逗号错误的主要内容,如果未能解决你的问题,请参考以下文章

在 mysql 表上添加外键约束时出现错误 1005

使用 CreateThread 调用类函数时出现错误 C3867

运行matlab时出现这个错误。是啥意思Error: Missing operator, comma, or semicolon.

NodeJs :- 使用本地护照时出现“缺少凭据”错误

在列数相等的表上应用 UNION 时出现“无法创建行...大于允许的最大行大小”错误

尝试在表中插入不存在的记录时出现 DB2 -803 错误