使用 CASE WHEN 进行 SQL 列透视
需要将 SQL 数据从行转换为列? CASE WHEN
语句提供了一种简单的数据透视解决方案,特别是在处理需要聚合的列中包含重复值的表时。
让我们用一个例子来说明。 想象一下这张桌子:
<code class="language-sql">Bank: name val amount John 1 2000 Peter 1 1999 Peter 2 1854 John 2 1888</code>
我们的目标:将其重组为一个表,其中唯一的“val”值成为列,每个唯一的“name”是一行。所需的输出:
<code class="language-sql">name amountVal1 amountVal2 John 2000 1888 Peter 1999 1854 </code>
以下是如何使用 SUM()
和 CASE WHEN
实现此枢轴:
<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>
此查询使用 SUM()
聚合每个唯一 amount
和 name
组合的 val
值。 CASE WHEN
语句检查 val
是 1 还是 2,并相应地分配相应的 amount
。 GROUP BY name
确保每个唯一名称一行。 结果呢? amountVal1
和 amountVal2
列整齐地表示透视数据。 此方法对于已知的、有限数量的 val
值有效。对于动态数量的值,请考虑使用 PIVOT 或其他更高级的技术。
以上是如何使用 CASE WHEN 透视 SQL 列将行数据转换为列?的详细内容。更多信息请关注PHP中文网其他相关文章!