SQL中的PIVOT给出错误-ORA-00933:SQL命令未正确结束

问题描述

Oracle SQL中的以下查询为我提供了一个包含ID,Key,Value的表。我想将键转换为列,并将值转换为列值,同时将ID保留为行的ID。我尝试了PIVOT查询。但是我收到一个错误-ORA-00933:SQL命令未正确结束。

初始SQL

SELECT * FROM API.publisher_message_queue_detail
WHERE message_seq_id 
IN (SELECT message_seq_id FROM API.publisher_message_queue WHERE status='N' AND MESSAGE_TYPE='RetailerNewConnection') ;

结果表

enter image description here

我想将此表转换为

enter image description here

我尝试过的PIVOT查询

SELECT * FROM API.publisher_message_queue_detail
WHERE message_seq_id IN 
    (SELECT message_seq_id FROM API.publisher_message_queue WHERE status='N' AND MESSAGE_TYPE='RetailerNewConnection') 
    PIVOT(
    COUNT(message_seq_id)
    FOR MSG_KEY
    IN (
        'MobileNo','ActivatedDate','ActSimNo','ActActdevice','PmsProfileID','PaymentMode','AgentCode','ActPrePost','Sbu','Channel','SalesPath','OrderId'
    )
  )
;

但是,出现以下错误。我这是怎么了?

ORA-00933: SQL command not properly ended
00933. 00000 -  "SQL command not properly ended"
*Cause:    
*Action:
Error at Line: 10 Column: 5

解决方法

我不喜欢将发明的语法用于没有它就很容易写的东西。只需使用条件聚合:

SELECT mq.AgentCode,. . .,-- whatever columns define each row
       MAX(CASE WHEN mqd.msg_key = 'MobileNo' THEN mqd.msg_value END) as MobileNo,MAX(CASE WHEN mqd.msg_key = 'ActivatedDate' THEN mqd.msg_value END) as ActivatedDate,. . . 
FROM API.publisher_message_queue JOIN
     API.publisher_message_queue_detail mqd
     ON mqd.message_seq_id = mq.message_seq_id
WHERE mq.status = 'N' AND mq.MESSAGE_TYPE = 'RetailerNewConnection'
GROUP BY mq.AgentCode,. . . ;

或者如果您想从父表中获取所有列:

SELECT *
FROM API.publisher_message_queue JOIN
     (SELECT mqd.message_seq_id,MAX(CASE WHEN mqd.msg_key = 'MobileNo' THEN mqd.msg_value END) as MobileNo,. . . 
      FROM API.publisher_message_queue_detail mqd
      GROUP BY mqd.message_seq_id
     ) mqd
     USING (message_seq_id)
WHERE mq.status = 'N' AND mq.MESSAGE_TYPE = 'RetailerNewConnection';

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...