3

我有一个名为 rp_resolution_master 的表。

CREATE TABLE "REQUEST_PORTAL"."RP_RESOLUTION_MASTER" 
   ( "RM_ID" NUMBER, 
    "SR_ID" NUMBER, 
    "REQUEST_STATUS" VARCHAR2(200 BYTE), 
    "COMMENTS" VARCHAR2(4000 BYTE), 
    "UPDATED_ON" DATE, 
    "UPDATED_BY" VARCHAR2(500 BYTE), 
    "INTERNAL_COMMUNICATION" VARCHAR2(1 BYTE) DEFAULT 'N'
   );

我正在对此进行非透视查询。

 SELECT *
   From Rp_Resolution_Master
Unpivot INCLUDE NULLS ( 
          value For measures In ( rm_id, request_status, Comments
                                , updated_by, internal_communication)
                      ) 
 where sr_id = 1004707 
   And Updated_On = ( Select Max(Updated_On) 
                        From Rp_Resolution_Master 
                       Where Sr_Id = 1004707);

但我得到一个错误

ORA-01790: 表达式必须与对应的表达式 01790 具有相同的数据类型。 00000 - “表达式必须与对应的表达式具有相同的数据类型” *原因:
*操作:行错误:3 列:51

我在这里做错了什么?

4

1 回答 1

3

问题是您正在尝试UNPIVOT使用不同数据类型的列。未透视的所有值必须相同,类似于使用UNIONorUNION ALL查询时,列中的每个值必须具有相同的数据类型。

由于RM_ID列是 anumber而其他列是varchar2那么您需要使用子查询来执行列cast()的a RM_ID

select *
from 
(
  SELECT cast(rm_id as varchar2(200)) rm_id,
    request_status,
    Comments,
    updated_by,
    internal_communication,
    Updated_On,
    sr_id
  From Rp_Resolution_Master
)
Unpivot INCLUDE NULLS ( 
          value For measures In ( rm_id, request_status, Comments
                                , updated_by, internal_communication)
                      ) 
where sr_id = 1004707 
  And Updated_On = ( Select Max(Updated_On) 
                     From Rp_Resolution_Master 
                     Where Sr_Id = 1004707);

请参阅SQL Fiddle with Demo of the syntax working

于 2012-11-15T10:15:26.007 回答