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、同じデータ型ではない列にしようとしていることです。UNIONまたはクエリを使用する場合と同様に、ピボットを解除する値はすべて同じであるUNION ALL必要があり、列の各値は同じデータ型である必要があります。

RM_ID列は anumberであり、他のものは必要があるため、列の aをvarchar2実行するサブクエリを使用する必要があります。cast()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 を参照してください

于 2012-11-15T10:15:26.007 に答える