【问题标题】:Getting null values when pivoting the data based on the join condition根据连接条件旋转数据时获取空值
【发布时间】:2022-01-25 04:16:40
【问题描述】:

我有一个要求,我必须根据 id 加入两个表。我也为此做了小提琴,但有一列 E_CLUBBED_E 填充为空,但理想情况下,它应该匹配 ques_ans 表的 ref_ans_value 列并给出输出,但我得到空值。

原因:我得到空值,因为 ref_ans_id 对于 ref_ques_id 是空值,我正在加入

join ans_ref ar
on ar.ref_ans_id = qa.ref_ans_id

所以这可能是获得空值的原因。

但这是理想的场景,ref_ques_id 23 ref_ans_id 将仅为空,基于此我必须填充 ques_ans 表中的 ref_ans_value

CREATE TABLE details_1 (
    e_id    NUMBER(10),
    e_name  VARCHAR2(30),
    CONSTRAINT pk_details_1_e_id PRIMARY KEY ( e_id )
);

insert into details_1 values(11,'A');

CREATE TABLE ques_ref (
    ques_id     NUMBER(10),
    code        VARCHAR2(50),
    code_label  VARCHAR2(100),
    constraint pk_ques_ref primary key(ques_id)
);

insert into ques_ref values(3,'changes_exist','Any known changes');
insert into ques_ref values(2,'E_Clubbed','E_id clubbed with other');
insert into ques_ref values(4,'E_impacted','E impacted by other');
insert into ques_ref values(23,'E_Clubbed_with_other','E clubbed with other E');


CREATE TABLE ques_ans (
    ques_ans_id  NUMBER(10),
    ref_ques_id  NUMBER(10),
    ref_ans_id   NUMBER(10),
    ref_ans_value VARCHAR2(100),
    e_id         NUMBER(10),
    CONSTRAINT pk_ques_ans PRIMARY KEY ( ques_ans_id ),
    CONSTRAINT fk_ques_ans FOREIGN KEY ( e_id )
        REFERENCES details_1 ( e_id ),
        constraint fk_ques_and_ques_id foreign key(ref_ques_id)
        references ques_ref (ques_id)
);

insert into ques_ans values(1,3,1,null,11);
insert into ques_ans values(2,2,2,null,11);
insert into ques_ans values(3,4,1,null,11);
insert into ques_ans values(4,23,null,1234,11);



CREATE TABLE ans_ref (
    ref_ans_id  NUMBER(10),
    code        VARCHAR2(10),
    code_value  VARCHAR2(30)
);

insert into ans_ref values(1,'R_Yes','Yes');
insert into ans_ref values(2,'R_No','No');

小提琴:Fiddle

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您只需将最后一个内连接更改为表 ans_ref 的左连接 -

    select  d.e_id,
            max(case qa.ref_ques_id when 3 then ar.code_value end) changes_exist,
            max(case qa.ref_ques_id when 2 then ar.code_value end) E_Clubbed,
            max(case qa.ref_ques_id when 4 then ar.code_value end) E_impacted,
            max(case qa.ref_ques_id when 23 then qa.ref_ans_value end) E_CLUBBED_E
      from      details_1 d
            join
                ques_ans qa
              on d.e_id = qa.e_id
            left join ans_ref ar
              on ar.ref_ans_id = qa.ref_ans_id
     group by d.e_id
    

    Fiddle.

    【讨论】:

    • @Vicky,其实不是。您尚未在问题中包含查询和示例数据。这就是它被否决的原因。
    • 我已经发布了小提琴,这就是为什么我没有在问题中发布示例数据而是发布了小提琴链接
    • 通常人们更喜欢阅读问题而不是去摆弄链接。
    • 再次感谢,但正如您的评论所说,我已经发布了示例数据,因为我这边有一些误解,如果我粘贴小提琴链接,那么示例数据本身会在小提琴中提供,所以我确实发布了链接。但接下来我会处理好这件事。我将示例数据粘贴到原始问题中,以便为这个问题投票。请做必要的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多