繁体   English   中英

SQL获取基于列的单行中的合并行

[英]SQL to get combine rows in single row based on a column

我有一张桌子,如下所示:

+---+---+---+
|obj|col|Val|
+---+---+---+
|1  |c1 | v1|
+---+---+---+
|1  |c2 | v2|
+---+---+---+
|2  |c1 | v3|
+---+---+---+
|2  |c2 | v4|
+---+---+---+

我正在寻找将以以下格式给出结果的SQL

+---+---+---+
|obj|c1 |c2 |
+---+---+---+
|1  |v1 | v2|
+---+---+---+
|2  |v3 | v4|
+---+---+---+

在此SQL中,我正在检查col ='c?' 并打印出相应的Val。 但是分组依据的原因是要避免所有NULL值,以防条件不匹配。 通过在obj上分组,将避免所有NULL值并产生所需的结果。

SELECT obj,
       MAX( CASE WHEN col = 'c1' THEN Val END ) AS c1,
       MAX( CASE WHEN col = 'c2' THEN Val END ) AS c2
  FROM Table
 GROUP BY obj;

首先,您需要从表中选择所有唯一ID

select distinct id
from a_table_you_did_not_name

如何使用它来离开您的专栏

select base.id, one.val as c1, two.val as c2
from (
  select distinct id
  from a_table_you_did_not_name
) base
left join a_table_you_did_not_name one on one.id = base.id and one.col = 'c1'
left join a_table_you_did_not_name two on two.id = base.id and two.col = 'c2'

注意:您的案例是这种连接的一个相对简单的案例-我这样编码,因为使用我的方法可以扩展到更复杂的案例,并且仍然可以使用。 对于此特定要求,还有其他一些方法可能会更简单。

特别是最常见的一种是联接到多个表,而不是所有表都在同一表中。 在这种情况下,我的方法仍然有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM