Как я могу усреднить ценность для каждого персонала - PullRequest
0 голосов
/ 01 мая 2020

У меня есть такая таблица:

ID|Money|Staff1|Staff2|Staff3|Staff4
-------------------------------
1 |200  | John | Peter| Mary | John
2 |300  | John | Peter| Mary

, и мне нужно рассчитать средние деньги каждого сотрудника в одной таблице.

ID|Staff1|Staff2|Staff3|Staff4
----------------------------------
1 |50    | 50   |  50  |  50
2 |100   | 100  | 100  | Null 

1 Ответ

0 голосов
/ 04 мая 2020

Решением этой проблемы может быть использование подзапроса, чтобы указать количество сотрудников для данного идентификатора. Мы вычисляем это, используя CASE операторы и добавочный символ + Будьте осторожны, не заключайте в кавычки 0 и 1, иначе вы получите строку вместо целого числа.

В простейшем формате вы можете вывести SQL, используя следующую команду:

SELECT
a.ID,
a.Money/a.stcnt AS 'Each'
FROM
    (SELECT
    b.ID,
    b.Money,
    CASE WHEN Staff1 > '0' THEN 1 ELSE 0 END
    +
    CASE WHEN Staff2 > '0' THEN 1 ELSE 0 END
    +
    CASE WHEN Staff3 > '0' THEN 1 ELSE 0 END
    +
    CASE WHEN Staff4 > '0' THEN 1 ELSE 0 END
    AS stcnt
    FROM staffmoney b) a

Однако, если вам требуется это с указанными c столбцами для каждого персонала, несмотря на тот факт, что эти цифры будут идентичны, вы можете добавить еще одну серию операторов CASE к вашему заявлению SELECT верхнего уровня, которое будет выглядеть следующим образом this;

SELECT
a.ID,
CASE WHEN a.stcnt > 0 THEN a.Money/a.stcnt ELSE NULL END AS 'Staff1',
CASE WHEN a.stcnt > 1 THEN a.Money/a.stcnt ELSE NULL END AS 'Staff2',
CASE WHEN a.stcnt > 2 THEN a.Money/a.stcnt ELSE NULL END AS 'Staff3',
CASE WHEN a.stcnt > 3 THEN a.Money/a.stcnt ELSE NULL END AS 'Staff4'
FROM
    (SELECT
    b.ID,
    b.Money,
    CASE WHEN Staff1 > '0' THEN 1 ELSE 0 END
    +
    CASE WHEN Staff2 > '0' THEN 1 ELSE 0 END
    +
    CASE WHEN Staff3 > '0' THEN 1 ELSE 0 END
    +
    CASE WHEN Staff4 > '0' THEN 1 ELSE 0 END
    AS stcnt
    FROM staffmoney b) a

Не очень эффективно, мой самый сильный совет, вероятно, будет переделывать ваши данные, чтобы вы могли рассчитывать по строкам, а не по столбцам, но это поможет вам получить то, что у вас есть, если это то, что вам требуется.

Удачи!

...