【问题标题】:Subtract the sum of one column from another table's column从另一表的列中减去一列的总和
【发布时间】:2020-04-01 01:54:49
【问题描述】:

我尝试过的:

SELECT requestformtbl.employee_name, requestformtbl.request_type, requestformtbl.total_day,
                requestformtbl.request_status, requestformtbl.admin_remark, requestformtbl.confirmed_by, requestformtbl.date_confirmed, requesttbl.max_allotment,
                (requesttbl.max_allotment - sum(requestformtbl.total_day)) as Available from requestformtbl inner join requesttbl on 
                requestformtbl.request_type = requesttbl.request_type;

错误:选择列表中的“requestformtbl.employee_name”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

如果 requestttbl.request_type="Vacation Leave" 有 requesttbl.max_allotment=20, 当 requestformtbl 中的新条目插入 requestformtbl.request_type="Vacation Leave" 和 requestformtbl.total_day=5 我想获得剩余的可用假期

【问题讨论】:

  • 您不能将 sum() 之类的聚合函数与您选择的“普通”列混合使用。您需要相应地对数据进行分组。为了帮助您,您必须添加示例数据和预期输出,最好是简化的。
  • 更新您的问题,添加适当的数据样本和预期结果作为表格文本
  • 对不起,我刚刚更新了我的问题,谢谢!
  • 没有。恐怕你没有。见meta.stackoverflow.com/questions/333952/…

标签: mysql asp.net vb.net


【解决方案1】:

您可以在不使用GROUP BY 的情况下获得所需的结果,方法是使用相关子查询来获取员工使用天数的总和:

SELECT rft.employee_name, 
       rft.request_type, 
       rft.total_day,
       rft.request_status, 
       rft.admin_remark, 
       rft.confirmed_by, 
       rft.date_confirmed, 
       rt.max_allotment,
       rt.max_allotment - (select sum(total_day) 
                           from requestformtbl rft2 
                           where rft2.employee_name = rft.employee_name) as Available
from requestformtbl rft
inner join requesttbl rt on rft.request_type = rt.request_type;

请注意,我使用表别名使查询更具可读性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    相关资源
    最近更新 更多