Как выбрать только столбцы с ненулевыми значениями sql - PullRequest
0 голосов
/ 24 октября 2018

У меня есть таблица с несколькими столбцами, которые могут быть нулевыми или иметь значение.Я хотел бы получить только те столбцы со значением.

Я пытался с 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 голосов
/ 24 октября 2018

Вы можете использовать оператор IFNULL, чтобы проверить NULL и получить альтернативный столбец

SELECT IFNULL(column1,column2) value
FROM TABLE1
0 голосов
/ 25 октября 2018

SQL-запрос фиксируется в возвращаемых столбцах.Таким образом, вы не можете делать то, что вы хотите с помощью простого select запроса.Вы можете использовать динамический SQL.

Однако вы можете возвращать только те значения, которые вам нужны, в виде одной строки:

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

Тем не менее, реальная проблема, вероятно, связана с вашей структурой данных.в общем случае вы не хотите хранить такие значения столбцов в сводной форме.Вместо этого включите одно значение в строку.Другими словами, вам нужна таблица junction / Ассоциации с одной строкой на значение и имя.

Тогда запрос будет:

select name, group_concat(value)
from association_table 
group by name;
0 голосов
/ 24 октября 2018

T-SQL:

SELECT COALESCE(column1, column2) from table

он выбирает значение первого ненулевого значения этого column1 and column2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...