You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现MySQL复杂查询:员工物品金额的行转列展示

解决方案

你可以通过左连接关联员工表和物品表,结合条件判断与聚合函数实现行转列的需求,同时处理无对应记录时显示0的场景:

SELECT 
    e.RUT,
    e.Name,
    COALESCE(SUM(CASE WHEN i.Item_Id = 3 THEN i.Amount ELSE 0 END), 0) AS Item_3_amount,
    COALESCE(SUM(CASE WHEN i.Item_Id = 8 THEN i.Amount ELSE 0 END), 0) AS Item_8_amount,
    '2022-10' AS Period
FROM Employees e
LEFT JOIN Items i 
    ON e.RUT = i.RUT 
    AND i.Period = '2022-10'
GROUP BY e.RUT, e.Name;

关键部分说明:

  • LEFT JOIN:保证所有员工(哪怕没有对应物品记录)都能出现在结果里
  • CASE WHEN 分支判断:分别匹配Item_Id=3和8的记录,提取对应金额,其他情况返回0
  • SUM聚合:应对同一员工同一物品可能有多条记录的情况,汇总金额;无匹配记录时SUM返回NULL
  • COALESCE函数:把NULL替换成0,满足无对应记录时显示0的要求
  • 固定Period字段:因为需求结果里Period统一为2022-10,直接指定即可;如果需要动态获取周期,可改为COALESCE(MAX(i.Period), '2022-10')

实际执行结果:

根据你提供的表数据,执行后会得到如下结果(注:你给出的期望结果中Luis的Item_3_amount数值有误,实际应为0):

RUT          Name  Item_3_amount  Item_8_amount   Period
15897554-4   Luis      0             50000       2022-10
18897554-9   Ramon    80000            0        2022-10

内容的提问来源于stack exchange,提问作者Jis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:55:16