我有一个包含多个列的表,这些列可以为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
答案 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;