Я думаю, что элегантное решение здесь состоит в том, чтобы на каждый столбец влияла column1
своя собственная функция преобразования;
DELIMITER $$
CREATE FUNCTION fn_transformation_for_column2(var_column1 INT)
RETURNS INT
BEGIN
IF (fn_condition(var_column1)) THEN
RETURN 1;
ELSE
RETURN 5;
END IF;
END;
DELIMITER ;
DELIMITER $$
CREATE FUNCTION fn_transformation_for_column3(var_column1 INT)
RETURNS INT
BEGIN
IF (fn_condition(var_column1)) THEN
RETURN 14;
ELSE
RETURN 51;
END IF;
END;
DELIMITER ;
на основе общего условия (которое снова может быть функцией):
DELIMITER $$
CREATE FUNCTION fn_condition(var_column1 INT)
RETURNS BOOLEAN
BEGIN
IF (var_column1 > 5) THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END;
DELIMITER ;
Наконец:
SELECT
fn_transformation_for_column2(t.column1) NewColumn2,
fn_transformation_for_column3(t.column1) NewColumn3,
...
FROM table t
;
Другой вариант - иметь одинаковую функцию преобразования для всех столбцов и обрабатывать ее преобразование на основе заданного параметра типа columntype:
DELIMITER $$
CREATE FUNCTION fn_transformation_for_columns(var_column1 INT, var_column_no INT)
RETURNS INT
BEGIN
IF (var_column1 > 5) THEN
CASE var_column_no
WHEN 2 THEN
RETURN 1;
WHEN 3 THEN
RETURN 14;
ELSE
RETURN 0;
END CASE;
ELSE
CASE var_column_no
WHEN 2 THEN
RETURN 5;
WHEN 3 THEN
RETURN 51;
ELSE
RETURN 0;
END CASE;
END IF;
END;
DELIMITER ;
, а затем:
SELECT
fn_transformation_for_columns(t.column1, 2) NewColumn2,
fn_transformation_for_columns(t.column1, 3) NewColumn3,
...
FROM table t
;