Oracle 数据透视多 Table

Oracle Pivot Multi Table

我正在尝试在 Oracle 中创建数据透视表。我不断收到错误消息

ORA-00904: "VALUEZ": invalid identifier 00904. 00000 - "%s: invalid identifier" *Cause:
*Action: Error at Line: 18 Column: 6

有什么想法吗?

SELECT * FROM
(
  SELECT ACC.NBR,CTA.NAMEZ
  FROM ACCS ACC
    JOIN CARS CAR ON CAR.CAR_AAD_ID = ACC.ACC_AAD_ID
    JOIN CTAS CTA ON  CAR_CUS_ID = CTA_CUS_ID
)
PIVOT
(
  MAX(VALUEZ) --comes from table  CTAS (ERROR LINE)
  FOR NAMEZ IN ('1','2','3') --from table CTAS
)
ORDER BY ACC.NBR;

附带说明一下,如果可以将 ('1','2','3') 变成子查询,我会很高兴,但看起来其他 post 我读过。如果这很容易,那就是(select 与 CTAS 不同的 namez)

您的 PIVOT 子句中引用的列必须存在于要进行透视的行源中。你select来自ACC.NBR,CTA.NAMEZtable;看起来您需要将其扩展为 ACC.NBR,CTA.NAMEZ,CTA.VALUEZ.

您不能使用子查询来替换数据透视值列表。我相信这样做的根本原因是解析器必须能够在执行查询之前找出查询将产生的列;因此必须对枢轴值进行硬编码。

如果适合将此查询包装在过程或函数中,您可以做的是首先执行查询以获取数据透视值列表,然后使用该查询构建数据透视查询字符串信息并通过动态 SQL.

执行

ora-01748: only simple column names allowed here pivot

select* from (SELECT TRUNC(I.POST_DATE) DATES FROM INVOICE I 
INNER JOIN INVC_TENDER_V T ON T.INVC_SID=I.INVC_SID)

PIVOT
(COUNT(*)
 FOR T.TENDER_TYPE IN(0,1) )