3

我正在尝试解决以下问题:

我有一个带有 timeStamp 列的表和三个用于不同类型变量的列。具有值的列根据条件随机填充。所以它看起来像这样:


smpl_time float_val num_val str_val
15:31 10 NULL NULL
15:32 NULL 15.4 NULL
15:33 NULL NULL 禁用

我想要实现的结果是将所有 val 字段合并为一列并根据 timeStamp 对它们进行排序:


smpl_time merge_val
15:31 10
15:32 15.4
15:33 已禁用



到目前为止,我有一个 SELECT 仅用于一种看起来像这样的 val 类型(它还包含表中每个条目通用的其他字段):

SELECT s.smpl_time AS Time,s.float_val AS Value, e.name AS Severity, m.name AS Status 
FROM sample s JOIN channel c ON c.channel_id=s.channel_id JOIN severity e ON
e.severity_id=s.severity_id JOIN status m ON m.status_id=s.status_id WHERE
s.channel_id='id' AND smpl_time BETWEEN TIMESTAMP 'startTime' AND TIMESTAMP 'stopTime';


有谁知道如何做到这一点,或者是否有可能?

干杯,

麦克风

4

2 回答 2

2

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce

合并(值,...)

返回列表中的第一个非 NULL 值,如果没有非 NULL 值,则返回 NULL。

mysql> SELECT COALESCE(NULL,1); -> 1

mysql> 选择 COALESCE(NULL,NULL,NULL); -> 空

于 2013-10-01T15:51:24.390 回答
2

假设为任何给定行仅填充三列中的一列,请使用COALESCE函数。

SELECT smpl_time, COALESCE(float_vaL, num_val, str_val) AS merge_val
    FROM ...
于 2013-10-01T15:51:35.327 回答