Задать вопрос
@YuriM1983
Фрилансер - веб-программист на питоне

Возможно ли простым и быстрым запросом оставить только не-NULL значения из разных строк?

Возможно ли простым и быстрым запросом оставить только не-NULL значения из разных строк?
Таблица:
id val1 val2 val3
1 1 N 2
2 3 4 N
3 N N 5

Чтобы был результат:
val1 val2 val3
1 4 2
3 N 5

Топорное решение (каждую колонку оформлять в отдельную таблицу со счётчиком ряда, и джоинить их по счетчику):
SELECT val1, val2, val3 FROM 
(SELECT @rn1:=@rn1+1 AS row_number_1, val1 
FROM t, (SELECT @rn1:=0) t_rn_1
ORDER BY IF(val1 IS NULL, 1, 0)
) t1
LEFT OUTER JOIN 
(SELECT @rn2:=@rn2+1 AS row_number_2, val2 
FROM t, (SELECT @rn2:=0) t_rn_2
ORDER BY IF(val2 IS NULL, 1, 0)
) t2 ON t1.row_number_1 = t2.row_number_2
LEFT OUTER JOIN 
(SELECT @rn3:=@rn3+1 AS row_number_3, val3 
FROM t, (SELECT @rn3:=0) t_rn_3
ORDER BY IF(val3 IS NULL, 1, 0)
) t3 ON t1.row_number_1 = t3.row_number_3
WHERE COALESCE(val1, val2, val3) IS NOT NULL;
  • Вопрос задан
  • 156 просмотров
Подписаться Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
TheRonCronix
@TheRonCronix
На вскидку FIRST_VALUE.
Что нужно понять - как хочется выстроить зависимость между строками: как разбить на группы и какое значение взять в каждой из групп. Ведь таблица - это по-умолчанию неупорядоченое множество.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы