Oracle:需要将ROWS值转换为COLUMN

问题描述 投票:0回答:1

我有多个记录,我想将其转换为单列。

我有一个包含如下记录的表格。

id prjid 学习id a_udf1 b_udf1 a_udf2 b_udf2 a_udf3 b_udf3
1 30 2 abc abc 2022 年 2 月 7 日 2022 年 2 月 7 日 化学 化学
2 12 3 xyz xyz 2022 年 2 月 8 日 2022 年 2 月 8 日 政治

我想要如下结果。

id prjid 学习id a_udf值 b_udf值
1 30 2 abc abc
1 30 2 2022 年 2 月 7 日 2022 年 2 月 7 日
1 30 2 化学 化学
2 12 3 xyz xyz
2 12 3 2022 年 2 月 8 日 2022 年 2 月 8 日
2 12 3 政治

等等。

Oracle 查询

SELECT id, prjid,studyid,
       CASE
           WHEN Attribute IN (A_UDF1, A_UDF2, A_UDF3, A_UDF4) THEN 'a_values'
           WHEN Attribute IN (B_UDF1, B_UDF2, B_UDF3) THEN 'b_values'
       END AS Category,
       Value
FROM (
    SELECT id, prjid,studyid, A_UDF1, A_UDF2, A_UDF3, B_UDF1, B_UDF2, B_UDF3
    FROM SAMPLE_T
) t
UNPIVOT (
    Value
    FOR Attribute IN (A_UDF1, A_UDF2, A_UDF3, B_UDF1, B_UDF2, B_UDF3)
);

我正在尝试上述查询,但没有给出正确的结果。它给出的结果如下

id prjid 学习id a_udf值 b_udf值
1 30 2 abc
1 30 2 2022 年 2 月 7 日
1 30 2 化学
2 12 3 xyz
2 12 3 2022 年 2 月 8 日
2 12 3 政治

等等。

我无法过滤“NULL”值,因为有时列可能包含空值,在这种情况下,如果我过滤空值,结果就会丢失。 有人可以帮我解决这个问题吗?

sql oracle case unpivot
1个回答
0
投票

我认为您需要的是以下内容:

select id, prj_id, study_id, a_udf1 a_udfvalues, b_udf1 b_udfvalues
from sample_t
union all
select id, prj_id, study_id, a_udf2 a_udfvalues, b_udf2 b_udfvalues
from sample_t
union all
select id, prj_id, study_id, a_udf3 a_udfvalues, b_udf3 b_udfvalues
from sample_t;
© www.soinside.com 2019 - 2024. All rights reserved.