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

如何通过SQL查询对关联表数据透视并求和PF与PT总额?

SQL查询解决方案

针对需求,这里提供两种可行的查询方案,解决PF+PT总额的求和问题:

方案一:条件聚合直接关联

通过CASE语句筛选PF和PT的金额,结合SUM()函数直接计算总额,再关联表B获取员工信息和实发工资:

SELECT
    B.emp AS 员工编号,
    SUM(CASE WHEN A.component = 'PF' THEN A.amount ELSE 0 END) +
    SUM(CASE WHEN A.component = 'PT' THEN A.amount ELSE 0 END) AS PF_PT总额,
    B.netpay AS 实发工资
FROM
    表B B
INNER JOIN
    表A A ON B.slip = A.slip
WHERE
    A.component IN ('PF', 'PT')  -- 只筛选PF和PT记录,提升效率
GROUP BY
    B.emp, B.slip, B.netpay;
  • 注:GROUP BY需包含所有非聚合字段,确保每个薪资单的记录被正确分组;WHERE子句可过滤无关的component,减少计算量。

方案二:先分组求和再关联

先通过CTE(公共表达式)计算每个薪资单的PF+PT总额,再与表B关联,逻辑更清晰:

WITH 薪资单税费汇总 AS (
    SELECT
        slip,
        SUM(amount) AS PF_PT总额
    FROM
        表A
    WHERE
        component IN ('PF', 'PT')
    GROUP BY
        slip
)
SELECT
    B.emp AS 员工编号,
    税费.PF_PT总额,
    B.netpay AS 实发工资
FROM
    表B B
INNER JOIN
    薪资单税费汇总 税费 ON B.slip = 税费.slip;
  • 这种方式适合表A数据量较大的场景,提前汇总数据能提升查询效率。

关键注意点

  • CONCAT()是字符串拼接函数,不能用于数值求和,求和必须用SUM();
  • 确保表A和表B的slip字段是有效的关联键,避免出现数据重复或关联错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:10:03