MySQL запрос на сумму значений нескольких столбцов, где имя столбца приходит из списка выбора - PullRequest
2 голосов
/ 16 мая 2019

Я создаю отчет, в котором я показываю элементы оклада, такие как базовый оклад, целевой бонус, надбавки и т. Д. В поле выбора, и отображаю данные об общих затратах сотрудника в соответствии с городом, страной, классом и т. Д. В бэк-энде зарплатаelements - это заголовок таблицы сведений о сотрудниках.

, поэтому мой запрос выглядит следующим образом: salary_type поступает из поля выбора элементов заработной платы с веб-страницы:

    SELECT d.city, 
       d.country, 
       d.business_level_3, 
       d.level, 
       d.function, 
       d.performance_rating, 
       d.gender, 
       d.grade, 
       Count(d.user_id)             AS hc, 
       rate * Sum(d."+salarytype+") AS Sum_of_employee_cost, 
       rate * Avg(d."+salarytype+") AS Employee_cost_avg, 
       rate * Max(d."+salarytype+") AS Employee_cost_max, 
       rate * Min(d."+salarytype+") AS Employee_cost_min, 
       Sum(d."+salarytype+")        AS cost_o 
FROM   employee_salary_details d 
       INNER JOIN manage_country c 
               ON c.NAME = d.country 
       INNER JOIN currency_rates r 
               ON r.from_currency = c.currency_id 
WHERE  r.to_currency = "+to_currency+" 
GROUP  BY city, 
          country, 
          business_level_3, 
          level, 
          function, 
          performance_rating, 
          gender, 
          grade 

Теперь Мой клиент хочетвключите множественный выбор элементов заработной платы, и в отчете должна быть указана сумма выбранных нескольких элементов заработной платы, таких как стоимость сотрудника для базовой и целевой зарплаты или стоимость работника всех типов зарплаты.

Эти элементы заработной платы взяты из другой таблицыи являются динамическими.

Каков наилучший способ достижения этого.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 16 мая 2019

Поскольку результат этого запроса используется на веб-странице, один из вариантов - переместить логику со стороны SQL на сторону внешнего интерфейса.Измените запрос SQL, чтобы он возвращал все необходимые вам столбцы, чтобы ваш сервер обрабатывал все данные для внешнего интерфейса, а затем внешний интерфейс (Javascript) может выполнять суммирование / минимальное / максимальное на основевыбранные атрибуты на странице.

В качестве альтернативы, при построении SQL-запроса для отправки ваша внутренняя логика, которая собирает SQL-запрос, может иметь больше логики.Например, в PHP:

$sql = <<<SQL
SELECT d.city, 
       d.country, 
       d.business_level_3, 
       d.level, 
       d.function, 
       d.performance_rating, 
       d.gender, 
       d.grade, 
       Count(d.user_id)             AS hc,
SQL;

if ($userOnlyPickedOneThing) {
  $sql += "rate * SUM(d." . $selectedColumn . ") AS Sum_of_employee_cost, ";
} else if ($userPickedTwoThings) {
  $sql += "rate * (SUM(d." . $thingOne . ")+SUM(d." . $thingTwo . ") AS Sum_of_employee_cost, ";
}

Вы строите свой SQL более постепенно, в зависимости от того, как был структурирован запрос.

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