首页 >数据库 >mysql教程 >如何使用 UNPIVOT 和 PIVOT 在 SQL 中转置表?

如何使用 UNPIVOT 和 PIVOT 在 SQL 中转置表?

Barbara Streisand
Barbara Streisand原创
2025-01-14 21:06:44523浏览

How to Transpose Tables in SQL Using UNPIVOT and PIVOT?

SQL 表格转置:UNPIVOT 和 PIVOT 函数的应用

在 SQL 中转置表格,可以使用 UNPIVOT 和 PIVOT 函数组合实现。UNPIVOT 函数将列转换为行,而 PIVOT 函数将行转换为列。

UNPIVOT 数据

UNPIVOT 函数用于将多列转换为单列。在示例中,需要将 A 和 B 列进行展开。以下查询演示了此过程:

<code class="language-sql">select day, col, value
from yourtable
unpivot
(
  value
  for col in (A, B)
) unpiv;</code>

此查询将创建一个包含三列的新表:day、col 和 value。col 列将包含列名(A 或 B),value 列将包含来自展开列的相应值。

PIVOT 数据

PIVOT 函数用于将行转换为列。在本例中,需要将 day 值(Mon、Tue、Wed、Thu、Fri)转换为列:

<code class="language-sql">select *
from
(
  select day, col, value
  from yourtable
  unpivot
  (
    value
    for col in (A, B)
  ) unpiv
) src
pivot
(
  max(value)
  for day in (Mon, Tue, Wed, Thu, Fri)
) piv;</code>

最终查询将生成期望的输出:

<code>Value | Mon | Tue | Wed | Thu | Fri
-------|-----|-----|-----|-----|-----
A      | 1   | 3   | 5   | 7   | 9
B      | 2   | 4   | 6   | 8   | 0</code>

将解决方案应用于您的查询

要将此解决方案应用于您的特定查询,可以按如下方式修改:

<code class="language-sql">select *
from
(
  select LEFT(datename(dw,datetime),3) as DateWeek,
    col, 
    value
  from DataTable 
  cross apply 
  (
    values ('A', ACalls), ('B', BCalls)
  ) c (col, value)
) src
pivot
(
  sum(value)
  for dateweek in (Mon, Tue, Wed, Thu, Fri)
) piv;</code>

此查询将把您的 DataTable 表中的数据转置为所需的格式。

以上是如何使用 UNPIVOT 和 PIVOT 在 SQL 中转置表?的详细内容。更多信息请关注PHP中文网其他相关文章!

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