sql - APEX 5 ORACLE SQL 中的动态魔法枢轴错误 "Only simple column names allowed here"

标签 sql oracle pivot oracle-apex

我尝试在 Oracle APEX 5 中构建一个 PIVOT 表。我有 3 个表:

表 CAB
身份证号码
CAB_DATE 日期

表CAB_DEP_TO_CAB
CAB_ID VARCHAR2
DEP_ID VARCHAR2

表CAB_DEP
身份证号码
DEP_NAME VARCHAR2

我试过:

SELECT DISTINCT 
    LISTAGG('''' || CAB_DATE || ''' AS ' || CAB_DATE,',')
        WITHIN GROUP (ORDER BY CAB_DATE) AS temp_in_statement 
    FROM (SELECT DISTINCT CAB_DATE FROM CAB);

这可以正常工作,但 PIVOT 不行:

SELECT * FROM 
    (SELECT cd.dep_name, c.cab_date, d.dep_id FROM cab c INNER JOIN cab_dep_to_cab d ON c.id = d.cab_id INNER JOIN cab_dep cd ON d.dep_id like ('%' || cd.id || '%') )
    PIVOT (SUM(dep_id) FOR c.cab_date IN (&str_in_statement));

它返回错误:ORA-01748“此处只允许使用简单的列名”

有人能看到我的错误吗? :O

顺便说一句。我想要这样的结果: enter image description here

顺便说一句。我尝试使用此处的代码:Dynamic pivot in oracle sql

最佳答案

我认为这里的问题是您在数据透视函数中使用“c.cab_date”而不是“cab_date”。这应该可行(不确定为什么你在第二次连接时有如此奇怪的连接条件,我用一个更合理的连接条件替换了它):

SELECT * FROM 
    (SELECT cd.dep_name
          , c.cab_date
          , d.dep_id
       FROM cab c 
      INNER JOIN cab_dep_to_cab d ON c.id = d.cab_id 
      INNER JOIN cab_dep cd ON d.dep_id = cd.id
    )
 PIVOT (SUM(dep_id) FOR cab_date IN (&str_in_statement));

如果我可以为您的表格设计添加一些小提示:我建议始终将“部门 ID”之类的列命名为相同的名称,我认为这将使代码更具可读性,但这只是个人偏好当然 ;)

我会这样命名:

Table CAB
CAB_ID number
CAB_DATE date

Table DEPARTMENTS
DEPARTMENT_ID number
DEPARTMENT_NAME varchar2

Table DEPARTMENT_CABS
CAB_ID number  -- not varchar as in your example!
DEPARTMENT_ID number  -- not varchar as in your example!

关于sql - APEX 5 ORACLE SQL 中的动态魔法枢轴错误 "Only simple column names allowed here",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52312394/

相关文章:

python - Pandas 枢轴与重复项

c# - 如何使用 WP7 Panorama & Pivot Controls 在 Windows Phone 7 中选择特定的 PivotItem?

mysql - MySQL 中何时使用单引号、双引号和反引号

android - 如何在android中获取标准格式的日期

MySQL - 根据该列乘以值

mysql - 将 Oracle SQL 重写为 MYsql

SQL - 查找以相同字符开头的行

mysql - 为 Amazon RDS 从 MySQL 迁移到 Oracle 的好处。值得? [A : no]

php - ORA-06550 必须声明标识符

python - Pandas 部分转置