如何将三栏变成一栏?

时间:2018-08-27 17:48:19

标签: sql sql-server

我有3个4列,其中3列是不同糖果的值。我想在一列中看到列出的所有糖果:

下面的示例(使用SQL Server):

原始表:

    +--------------------+----------+---------+
    |  ID     |    Col1    | Col2    |
    +---------------------+----------+---------+
    | L123    |   TWIX     |         |       
     +--------------------+----------+---------+
    | L124    |  TWIX      |         |
    +--------------------+-----------+---------+        
    | L125    |            |   m&ms  |
    +--------------------+----------+---------+
    | F143    |            |   m&ms  |
    +--------------------+----------+---------+
    | F144     | gummies |          |
    +--------------------+----------+---------+
    | F144     | gummies |          | 
    +--------------------+----------+---------+

新表格:

我尝试了联合声明和case表达式,但是它们看起来既冗长又复杂,或者不起作用。

 +--------------------+
|  ID     |    Col1  |
+--------------------+
| L123    |   TWIX   |            
 +-------------------+
| L124    |  TWIX    |
+--------------------+      
| L125     |   m&ms  |
+--------------------+
| F143     | m&ms    |
+--------------------+
| F144     | gummies |          
+--------------------+
| F144     | gummies |          
+--------------------+

2 个答案:

答案 0 :(得分:2)

您似乎想要:

select ID, coalesce(Col1, Col2, Col3) as Col1
from table t;

答案 1 :(得分:0)

我认为您的列数据在字符串中没有空格。在这种情况下,您可以执行以下操作:

Select ID, RTRIM(LTRIM(CONCAT(CONCAT(col1,,col2),,col3))) as one_col from table_name

逻辑将col 1,2,3连接起来。最后从中删除前导和尾随空格。这样一来,您就可以从所有三列中的任何一列中获得数据。