Oracle:需要将ROWS值转换为COLUMN

kknvjkwl  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(71)

我有多个记录,我想转换成单列。
我有一个表,其中包含如下记录。
| ID|普尔吉德|学习型|a_udf1| b_udf1| a_udf2| b_udf2| a_udf3| b_udf3|
| --|--|--|--|--|--|--|--|--|
| 1 | 30 | 2 |ABC| ABC| 2022年2月7日|2022年2月7日|Chem| Chem|
| 2 | 12 | 3 |xyz| xyz| 2022年2月8日|2022年2月8日|政体|null|
我想要的结果如下。
| ID|普尔吉德|学习型|a_udf值|B_udf值|
| --|--|--|--|--|
| 1 | 30 | 2 |ABC| ABC|
| 1 | 30 | 2 |2022年2月7日|2022年2月7日|
| 1 | 30 | 2 |Chem| Chem|
| 2 | 12 | 3 |xyz| xyz|
| 2 | 12 | 3 |2022年2月8日|2022年2月8日|
| 2 | 12 | 3 |政体|null|

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|普尔吉德|学习型|a_udf值|B_udf值|
| --|--|--|--|--|
| 1 | 30 | 2 |ABC| null|
| 1 | 30 | 2 |2022年2月7日|null|
| 1 | 30 | 2 |Chem| null|
| 2 | 12 | 3 |null| xyz|
| 2 | 12 | 3 |null| 2022年2月8日|
| 2 | 12 | 3 |null|政体|

我不能过滤“空”值,因为有时列可能包含空值,在这种情况下,如果我过滤空值,它将从结果中丢失。有人能帮帮我吗。

eivgtgni

eivgtgni1#

我认为你需要的是下面的:

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;

相关问题