如何解决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') ;
结果表
我想将此表转换为
我尝试过的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';
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。