如何删除空值并将两个相同的行合并为一个

问题描述 投票:0回答:4

我有一个表 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 硕士 海洋工程

所以没有数据重复,也更好看。而不是有两行,只有相同的数据。

sql pivot aggregate-functions
4个回答
1
投票
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     

0
投票

我们可以使用

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

这里演示


0
投票

我会把你的代码和 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 值


0
投票
SELECT
  t1.id,
  t1.value0 AS type_value,
  t2.value0 AS sub_type_value
FROM original_table t1
INNER JOIN original_table t2
  ON t1.id = t2.id
WHERE
  t1.key0 = 'type' AND t2.key0 = 'sub_type';

感谢@SelVazi 的演示。我用它来测试我的代码,结果附在下面。

© www.soinside.com 2019 - 2024. All rights reserved.