【问题标题】:how can i average value to each staff我怎样才能为每个员工平均价值
【发布时间】:2020-05-01 07:19:58
【问题描述】:

我有一张这样的桌子:

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 

【问题讨论】:

  • 嗨@raymond,您使用什么软件/应用程序来存储您的表格

标签: calculated-columns


【解决方案1】:

对此的解决方案可能是使用子查询为您提供该给定 ID 的员工人数。我们通过使用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

但是,如果您需要为每个员工提供特定的列,尽管这些数字是相同的,您可以在顶级 SELECT 语句中添加另一系列 CASE 语句,如下所示;

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

效率不高,我最强烈的建议可能是重新建模您的数据,以便您可以从行而不是列进行计算,但是如果这是您需要的,这将让您继续使用您所拥有的。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2021-06-07
    • 1970-01-01
    相关资源
    最近更新 更多