首页 >数据库 >mysql教程 >如何使用 CASE WHEN 和聚合在 SQL 中透视列?

如何使用 CASE WHEN 和聚合在 SQL 中透视列?

DDD
DDD原创
2025-01-11 16:08:42703浏览

How Can I Pivot a Column in SQL Using CASE WHEN and Aggregation?

利用SQL的CASE WHEN语句进行列的透视

在关系型数据库中,为了分析或展示数据的需要,经常需要将数据重塑成不同的格式。其中一种常见的转换是透视,即将多行数据合并成一行。

问题:

考虑名为“Bank”的表,其列为“name”、“val”和“amount”:

name val amount
John 1 2000
Peter 1 1999
Peter 2 1854
John 2 1888

目标是透视“val”列,创建两个名为“amountVal1”和“amountVal2”的新列,分别表示“val”值为“1”和“2”的“amount”值。期望的输出如下所示:

name amountVal1 amountVal2
John 2000 1888
Peter 1999 1854

解决方案:

为了执行此转换,可以使用CASE WHEN表达式以及聚合函数。以下SQL查询可以达到预期的结果:

<code class="language-sql">SELECT 
  name,
  SUM(CASE WHEN val = 1 THEN amount ELSE 0 END) AS amountVal1,
  SUM(CASE WHEN val = 2 THEN amount ELSE 0 END) AS amountVal2
FROM bank GROUP BY name</code>

在这个查询中:

  • CASE WHEN表达式检索每个“val”的“amount”值,并将任何不匹配的“val”值转换为0。
  • SUM()函数聚合每个“name”的结果,有效地将对应“val”值的“amount”值相加。
  • GROUP BY子句按“name”分组结果,确保为表中每个唯一名称合并值。

通过使用此查询,您可以成功地透视“Bank”表中的数据,创建所需的列“amountVal1”和“amountVal2”,它们分别包含“val”值为“1”和“2”的“amount”值。

以上是如何使用 CASE WHEN 和聚合在 SQL 中透视列?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn