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

销售表SQL查询:如何将指定国家转为结果列名展示销售额总和?

解决行转列的销售额汇总需求

嘿,你遇到的是典型的行转列场景,咱们可以通过条件聚合来调整SQL,得到你想要的列式结果。先分析下你当前查询的问题:你原来的GROUP BY 1,2会把每个Product_ID + Country的组合单独作为一行,所以US、DE是以行值的形式展示的;而我们需要把这两个国家转成列,同时按产品汇总销售额。

修改后的SQL语句

SELECT 
  Product_ID,
  SUM(CASE WHEN Country = 'US' THEN CAST(Sales_Volume AS INT) ELSE NULL END) AS US,
  SUM(CASE WHEN Country = 'DE' THEN CAST(Sales_Volume AS INT) ELSE NULL END) AS DE
FROM Sales
WHERE Country IN ('US', 'DE')
GROUP BY Product_ID;

关键修改点说明

  • 替换分组逻辑:把原来的GROUP BY 1,2改成只按Product_ID分组(也就是GROUP BY 1),这样每个产品只会生成一行数据。
  • 条件聚合生成列:用CASE WHEN语句针对每个目标国家筛选数据,只对符合条件的销售额求和。这里要注意把Sales_Volume从VARCHAR转成数值类型(比如INT),不然字符串类型无法正确求和。
  • 简化WHERE条件:用IN ('US', 'DE')替代原来的OR条件,逻辑完全一致但更简洁。
  • 自动处理NULL:SUM函数会忽略NULL值,所以如果某个产品在某个国家没有销售记录,对应的列就会显示NULL,正好匹配你的期望结果。

验证效果

执行上面的SQL后,就能得到你想要的结果:

Product_IDUSDE
P001600700
P002NULL300
P003800NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:52:39