SQL - 仅从多个字段中选择一个值

时间:2014-03-06 23:39:18

标签: sql

假设以下

col1      col2       col3       col4
------+----------+---------+---------
abc   |          |         |            

是的,col1-4中有空格!

我想选择不是空格的列。在第1行它是col1,但在第20行它可能是col3,第55行它可能是col2,依此类推。我只需要返回该列。

在这四列范围内总会只有一列存储值,我只需要一个实际上有信息的列

这将是报告的更大查询的一部分,因此无论列abc是什么,我都需要在每个结果案例中看起来都相同。这意味着我不能将结果col1用于一个案例而col2用于另一个案例,因为报告无法识别。该列需要始终被称为相同。

是的,我知道最好存储NULLS与空格,以及为什么在只有一个可以拥有数据的情况下使用四列,为什么不使用一个。我已经抱怨了这一点,所以不要扯我一个关于糟糕数据库设计的新内容,因为我同意。

3 个答案:

答案 0 :(得分:6)

SELECT LTRIM(RTRIM(col1 + col2 + col3 + col4))

我们开始......为什么不在糟糕的设计中添加错误的代码。您可以在技术上将所有列添加到一起,然后将它们修剪为前导/尾随空格。我不推荐它用于大规模部署的性能。哎呀,我不建议任何生产脚本,但我以前来过这里......要做你能做到的事情。

答案 1 :(得分:1)

为什么不使用CASE语句,例如

CASE WHEN col1 <> ' ' THEN col1
    WHEN col2 <> ' ' THEN col2
    WHEN col3 <> ' ' THEN col3
    WHEN col4 <> ' ' THEN col4
END

答案 2 :(得分:0)

你可以这样做:

case 
   when col1 != '' then col1
   when col2 != '' then col2
   ...
end