我有一个表 xyz,列为 id、key0 和 value0。
资料:
id | 键0 | 值0 |
---|---|---|
1 | 类型 | 学士 |
1 | 子类型 | 计算机科学 |
2 | 类型 | 学士 |
2 | 子类型 | 生物学 |
3 | 类型 | 硕士 |
3 | 子类型 | 海洋工程 |
我正在尝试将此表加入另一个表中,例如:
CASE
WHEN xyz.key0 = 'type' THEN xyz.value0
END AS TYPE,
CASE
WHEN xyz.key0 = 'sub_type' THEN xyz.value0
END AS SUB_TYPE
但是结果不是我想要的。我得到这样的结果:
id | 类型 | 子类型 |
---|---|---|
1 | 学士 | 空 |
1 | 空 | 计算机科学 |
2 | 学士 | 空 |
2 | 空 | 生物学 |
3 | 硕士 | 空 |
3 | 空 | 海洋工程 |
我更喜欢的是:
id | 类型 | 子类型 |
---|---|---|
1 | 学士 | 计算机科学 |
2 | 学士 | 生物学 |
3 | 硕士 | 海洋工程 |
所以没有数据重复,也更好看。而不是有两行,只有相同的数据。
SELECT
id,
MAX(CASE WHEN key0 ='type' THEN value0 END) AS Type,
MAX(CASE WHEN key0 ='sub_type' THEN value0 END) AS Sub_Type
FROM
xyz
GROUP BY
id
我们可以使用
group by
和 MAX CASE WHEN
select id,
MAX(CASE WHEN key0 = 'type' THEN value0 END) AS TYPE,
MAX(CASE WHEN key0 = 'sub_type' THEN value0 END) AS SUB_TYPE
from mytable
group by id
我会把你的代码和 Qwerty 的代码结合起来
select id,
MAX(Type) AS Type,
MAX(SUB_TYPE) AS Sub_Type
FROM
(
select id,
CASE
WHEN xyz.key0 = 'type' THEN xyz.value0
END AS TYPE,
CASE
WHEN xyz.key0 = 'sub_type' THEN xyz.value0
END AS SUB_TYPE
from subjects sub join xyz xyz on xyz.id = sub.id
)x
GROUP BY id
这将有助于消除两列中的 NULL 值