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

如何使用聚合函数将SQL表字段值转为查询结果的表头

SQL行转列查询方案

你需要实现的是典型的行转列(透视表)统计需求,不同数据库的实现语法略有区别,以下是通用兼容写法和各主流数据库的适配方案:

通用CASE WHEN写法(兼容所有主流SQL数据库)

这种写法不依赖数据库特有函数,MySQL、PostgreSQL、SQL Server、Oracle都可以直接运行:

SELECT 
    Date,
    SUM(CASE WHEN type = 'Cash' THEN amount ELSE 0 END) AS Cash,
    SUM(CASE WHEN type = 'Google Pay' THEN amount ELSE 0 END) AS `Google Pay`
FROM sales_table
GROUP BY Date
ORDER BY Date;

语法说明

  • 用CASE WHEN判断每条记录的支付类型,匹配上就返回对应金额,不匹配返回0,避免聚合统计时出现空值
  • 对判断后的结果用SUM聚合,得到同日期同类型的总金额
  • 如果type值包含空格(比如Google Pay),需要用对应数据库的转义符包裹别名:MySQL用反引号、SQL Server用方括号、Oracle用双引号

各数据库特有简化写法

  • MySQL:可以用IF函数简化判断逻辑
SELECT 
    Date,
    SUM(IF(type = 'Cash', amount, 0)) AS Cash,
    SUM(IF(type = 'Google Pay', amount, 0)) AS `Google Pay`
FROM sales_table
GROUP BY Date
ORDER BY Date;
  • SQL Server:可以用PIVOT关键字实现透视
SELECT Date, Cash, [Google Pay]
FROM (
    SELECT Date, type, amount FROM sales_table
) AS source
PIVOT (
    SUM(amount) FOR type IN (Cash, [Google Pay])
) AS pivot_table
ORDER BY Date;
  • PostgreSQL:可以用FILTER子句简化条件聚合
SELECT 
    Date,
    SUM(amount) FILTER (WHERE type = 'Cash') AS Cash,
    SUM(amount) FILTER (WHERE type = 'Google Pay') AS "Google Pay"
FROM sales_table
GROUP BY Date
ORDER BY Date;

执行符合你数据库环境的语句后,就可以得到预期结果:

DateCashGoogle Pay
2021-12-01100500
2021-12-02100400

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:45:03