如何将行转换为同一配置单元表中的两列
这是表格:
|ID | type | value |
|id0 | ACC | K0 |
|id0 | PCC | K2 |
|id0 | PCC | HZ |
|id0 | ABB | MM |
|id0 | PBB | L10 |
|id1 | ACC | M5 |
|id1 | PBB | 05 |
所有列都是字符串。我想以以下方式转置该表:“类型”列将被划分为仅第一个字母的列,而“类型”的其余部分的唯一值将成为新列,具有“值”列的值。 我正在尝试获取:
|ID | type1| CC | BB |
|id0 | A | K0 | MM |
|id0 | P | K2 | L10|
|id0 | P | HZ | |
|id1 | A | M5 | |
|id1 | P | | 05 |
我使用Case语句创建列:
SELECT ID,
substring(type,1,1) AS type1,
CASE WHEN type LIKE '%CC' THEN value END AS CC,
CASE WHEN type LIKE '%BB' THEN value END AS CAT
FROM tb1
但是我得到的行数却相同:
|ID |type1| CC |BB |
|id0 | A | K0 |NULL|
|id0 | P | K2 |NULL|
|id0 | P | HZ |NULL|
|id0 | A |NULL |MM |
|id0 | P |NULL |L10 |
|id1 | A | M5 |NULL|
|id1 | P |NULL |05 |
如何减少行数。对于我的示例,在7行中,我可以得到5。
我使用了“ COLLECT_SET”,但我将所有值作为列表获取。