我有多个记录,我想将其转换为单列。
我有一个包含如下记录的表格。
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 | 政治 | 空 |
等等。
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”值,因为有时列可能包含空值,在这种情况下,如果我过滤空值,结果就会丢失。 有人可以帮我解决这个问题吗?
我认为您需要的是以下内容:
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;