如何仅选择具有非空值的列sql

时间:2018-10-24 15:50:14

标签: mysql sql

我有一个包含多个列的表,这些列可以为null或具有值。我只想获取带有值的列。

我在IF子句中尝试了SELECT

SELECT
    IF(column1 IS NOT NULL, column1, null AS value,
    IF(column2 IS NOT NULL, column2, null AS value,
    IF(column3 IS NOT NULL, column3, null AS value,
    IF(column4 IS NOT NULL, column4, null AS value,
    IF(column5 IS NOT NULL, column5, null AS value,
    IF(column6 IS NOT NULL, column6, null) AS value
FROM
    table1;

但这不是我想要的结果,因为我一开始就解释过。 我也尝试了CASE但结果相同。

编辑:

例如,假设我们有此表。 列1将始终显示。

COLUMN1  COLUMN2  COLUMN3  COLUMN4  COLUMN 5
--------------------------------------------
NAME1    NULL     VALUE    VALUE    NULL
NAME2    VALUE    NULL     VALUE    NULL
NAME3    VALUE    VALUE    NULL     VALUE

始终使用相同的查询,只是更改此WHERE子句 ...WHERE COLUMN1 LIKE 'NAME1';我想要下一个输出

COLUMN1  COLUMN3  COLUMN4
-------------------------
NAME1    VALUE    VALUE

另一个示例:...WHERE COLUMN1 LIKE 'NAME3';

COLUMN1  COLUMN2  COLUMN3  COLUMN 5
-----------------------------------
NAME3    VALUE    VALUE    VALUE

3 个答案:

答案 0 :(得分:1)

T-SQL:

service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi

它选择此SELECT COALESCE(column1, column2) from table 的第一个非null的值

答案 1 :(得分:0)

您可以使用IFNULL语句检查NULL并获取备用列

sort file1 file2 [file3...filen] |  uniq > newfile.txt

答案 2 :(得分:0)

SQL查询固定在返回的列中。因此,您无法通过简单的select查询来执行所需的操作。您可以使用动态SQL。

但是,您只能将所需的值作为单个字符串返回:

select name, concat_ws(',', column1, column2, column3, column4, column5, column6)
from t
where . . . ;

也就是说,真正的问题可能是您的数据结构。通常,您不希望以透视形式存储此类列值。而是,每行包含一个值。换句话说,您想要一个 junction / association 表,其中每个值和每个名称都有一行。

然后查询将是:

select name, group_concat(value)
from association_table 
group by name;