利用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>
在这个查询中:
通过使用此查询,您可以成功地透视“Bank”表中的数据,创建所需的列“amountVal1”和“amountVal2”,它们分别包含“val”值为“1”和“2”的“amount”值。
以上是如何使用 CASE WHEN 和聚合在 SQL 中透视列?的详细内容。更多信息请关注PHP中文网其他相关文章!