我有多个记录,我想转换成单列。
我有一个表,其中包含如下记录。
| 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|政体|
等
我不能过滤“空”值,因为有时列可能包含空值,在这种情况下,如果我过滤空值,它将从结果中丢失。有人能帮帮我吗。
1条答案
按热度按时间eivgtgni1#
我认为你需要的是下面的: