Решением этой проблемы может быть использование подзапроса, чтобы указать количество сотрудников для данного идентификатора. Мы вычисляем это, используя 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
Не очень эффективно, мой самый сильный совет, вероятно, будет переделывать ваши данные, чтобы вы могли рассчитывать по строкам, а не по столбцам, но это поможет вам получить то, что у вас есть, если это то, что вам требуется.
Удачи!