SQL多行成一行

时间:2014-01-21 14:28:26

标签: sql select

我的表数据看起来像

 Col1  | Col2 | Col3
    1  | NULL | NULL
  NULL |  2   | NULL
  NULL | NULL |  3

对于任何列,只有入口。这意味着,在上面的数据中,如果row1具有Col1的值,那么Col1将没有值具有值。同样,如果row1具有Col1的值,则它不具有任何其他列的值。

我想编写一个查询,这样我只能获得一行整个数据(保留NULL值)。即

Col1 | Col2 | Col3
  1  |  2   |  3

3 个答案:

答案 0 :(得分:4)

最简单的方法是使用聚合:

select max(col1) as col1, max(col2) as col2, max(col3) as col3
from t;

答案 1 :(得分:0)

select 
sum(ifnull(col1,0)) as col1, 
sum(ifnull(col2,0)) as col2
sum(ifnull(col3,0)) as col3
from t;

答案 2 :(得分:0)

假设该表名为tab,如果只有3列,则以下查询将起作用:

select t1.Col1, t2.Col2, t3.Col3
from tab t1, tab t2, tab t3
where t1.Col1 is not null and t2.Col2 is not null and t3.Col3 is not null

问题是查询必须为每个附加列的表别名。它可能不完美,但它是一种解决方案。