2016-02-24 12 views
0

Привет, мне нужно создать столбец во время выполнения (RANK зарплаты), который зависит от значения столбца зарплаты из одной таблицы (COLLAGE), и эта зарплата связана с таблица сотрудников. Можете ли вы предложить, как его создать. Столбец RANK будет содержать значение, основанное на зарплате, если зарплата выше, чем RANK равна 1 ... в порядке возрастания.создание столбца во время выполнения во время выполнения sql-запроса

+1

Добро пожаловать в StackOverflow! Приложите полную структуру таблиц, необходимых для выполнения этой задачи, включая внешние ключи для соответствия данным. Также определите, какую СУБД вы используете. Ответы будут отличаться от вашего двигателя. Это Oracle или MySQL? –

+0

Я думаю, что вы хотите, чтобы оператор SQL включал ваши таблицы «COLLAGE» и «Employee» и оценивал «зарплату» для каждого сотрудника. Не столько создать столбец во время выполнения, сколько написать инструкцию SQL, которая вернет необходимый вам набор записей. Кроме того, вам нужно указать, какую СУБД вы используете. Oracle и MySQL представляют собой две разные базы данных. – JNevill

+0

Если вам нужно создавать столбцы в таблице во время выполнения, это должен быть большой флаг в отношении вашего дизайна. – OldProgrammer

ответ

0

Это даст вам идентификатор вашего сотрудника, его зарплату и столбец рангов.

SELECT 
    *, 
    @currentRank := @currentRank + 1 AS rank_of_salary 
FROM (
    SELECT 
     c.employee_id, 
     e.salary 
    FROM  
     collage c 
     INNER JOIN employee e ON c.employee_id = e.employee_id 
    ) t, (SELECT @currentRank := 0) r 
ORDER BY salary 

(SELECT @currentRank := 0) инициализирует переменную так, что вам не нужно отдельное SET заявление.

Для каждой строки @currentRank переменная увеличивается и сохраняется в столбце rank_of_salary. Я считаю, что это скорее эквивалент row_number. Правильный порядок этого ранга поддерживается путем сортировки вывода с предложением ORDER BY salary.

+0

Будет ли текущий ранг автоматически увеличиваться? –

+0

можно ли использовать с использованием case statement ?? –

+0

Добавлено некоторое объяснение. Он будет автоматически увеличен для каждой строки. Нет, это невозможно сделать с помощью оператора CASE, так как для этого вам понадобится предыдущее значение для его сравнения. Вы также можете расширить этот запрос, используя http://stackoverflow.com/questions/11303532/simulate-lag-function-in-mysql –

Смежные вопросы