【问题标题】:Columns of My Unpivot Query Results not Where I Want Them to Be我的 Unpivot 查询结果的列不是我想要的
【发布时间】:2021-04-08 15:48:01
【问题描述】:

我编写了一个 SQL 查询,将电话号码从列在三个单独的列(Pri_Phn_No、Alt_Phn_No、Cell_Phn_No)中转换为一列电话号码和一列电话类型

问题是查询结果在电话号码和电话类型列之前显示 DATE_CREATED 和 DATE_MODIFIED 列。我希望它们在这些列之后显示。到目前为止,我尝试过的任何方法都没有奏效。

**如果我按照我想要的顺序显式添加字段 - 到脚本的 Unpivot 部分:user_id、phone_type、phone_number、date_created、date_modified,我会收到以下错误消息

ORA-OO904: "date_modified": invalid identifier
00904. 0000 - "%s: invalid identifier"**

查询

CREATE Table UserPhoneNo nologging as

SELECT USER_ID, PRI_PHN_NO, ALT_PHN_NO, CELL_PHN_NO, DATE_CREATED, DATE_MODIFIED
FROM Address_history;

SELECT * FROM UserPhoneNo
UNPIVOT INCLUDE NULLS(
    (phone_number)  -- unpivot_clause
    FOR phone_type --  unpivot_for_clause
    IN ( -- unpivot_in_clause
        PRI_PHN_NO AS 'Primary', 
        ALT_PHN_NO AS 'Secondary', 
        CELL_PHN_NO AS 'Tertiary'
    )
)
order by USER_ID;

drop Table UserPhoneNo;

查询结果

示例查询数据

CREATE TABLE Address_History (
    USER_ID NUMBER(9) NOT NULL,
    PRI_PHN_NO VARCHAR2(50) NOT NULL,
    ALT_PHN_NO VARCHAR2(50) NULL,
    CELL_PHN_NO VARCHAR2(50) NULL,
    DATE_CREATED DATE NOT NULL,
    DATE_MODIFIED DATE NULL
);

Insert into Address_History 
(USER_ID,PRI_PHN_NO,ALT_PHN_NO,CELL_PHN_NO,DATE_CREATED,DATE_MODIFIED) values (475,'2191234567',2197654321,null,to_date('04-NOV-06','DD-MON-RR'),to_date('11-AUG-14','DD-MON-RR'));

Insert into Address_History
(USER_ID,PRI_PHN_NO,ALT_PHN_NO,CELL_PHN_NO,DATE_CREATED,DATE_MODIFIED) values (467,'3191234567',null,null,to_date('04-NOV-06','DD-MON-RR'),to_date('03-APR-08','DD-MON-RR'));

Insert into Address_History 
(USER_ID,PRI_PHN_NO,ALT_PHN_NO,CELL_PHN_NO,DATE_CREATED,DATE_MODIFIED) values (468,'4191234567',4197654321,null,to_date('04-NOV-06','DD-MON-RR'),null);

Insert into Address_History
 (USER_ID,PRI_PHN_NO,ALT_PHN_NO,CELL_PHN_NO,DATE_CREATED,DATE_MODIFIED) values (469,'5191234567',null,null,to_date('04-NOV-06','DD-MON-RR'),to_date('20-JAN-10','DD-MON-RR'));

Insert into Address_History 
(USER_ID,PRI_PHN_NO,ALT_PHN_NO,CELL_PHN_NO,DATE_CREATED,DATE_MODIFIED) values (471,'6191234567',null,null,to_date('04-NOV-06','DD-MON-RR'),to_date('19-MAY-08','DD-MON-RR'));

Insert into Address_History 
(USER_ID,PRI_PHN_NO,ALT_PHN_NO,CELL_PHN_NO,DATE_CREATED,DATE_MODIFIED) values (473,'7191234567',7197654321,null,to_date('04-NOV-06','DD-MON-RR'),to_date('20-JAN-10','DD-MON-RR'));

【问题讨论】:

  • 与其使用select *,不如按照您希望它们返回的顺序明确列出您希望返回的列。 select user_id, phone_type, phone_number, date_created, date_modified.
  • 如果我按我想要的顺序显式添加字段 - 到脚本的 Unpivot 部分:user_id、phone_type、phone_number、date_created、date_modified,我收到以下错误消息 ORA-OO904:“date_modified ": 无效标识符 00904. 0000 - "%s: 无效标识符"

标签: oracle unpivot


【解决方案1】:

这是编写查询以查看所需列的正确方法:

SELECT USER_ID、phone_type、phone_number、DATE_CREATED、DATE_MODIFIED FROM (从 Address_history 中选择 USER_ID、PRI_PHN_NO、ALT_PHN_NO、CELL_PHN_NO、DATE_CREATED、DATE_MODIFIED)

UNPIVOT 包括 NULLS(

phone_number -- unpivot_clause

FOR phone_type -- unpivot_for_clause

IN (--unpivot_in_clause

PRI_PHN_NO AS 'Primary', 

ALT_PHN_NO AS 'Secondary', 

CELL_PHN_NO AS 'Tertiary'

) )

按 USER_ID 排序;

【讨论】:

    猜你喜欢
    • 2016-10-04
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2021-06-23
    相关资源
    最近更新 更多