首页 > 数据库 > mysql教程 > 如何转置具有多列的 SQL 表?

如何转置具有多列的 SQL 表?

DDD
发布: 2025-01-14 20:52:47
原创
295 人浏览过

How to Transpose a SQL Table with Multiple Columns?

将包含多个列的 SQL 表格转置

问题:

您需要将一个包含多个列的 SQL 表格转置,例如:

<code>Day  A  B 
---------
Mon  1  2
Tue  3  4
Wed  5  6
Thu  7  8
Fri  9  0</code>
登录后复制

转置成以下格式:

<code>Value Mon Tue Wed Thu Fri 
--------------------------
A      1   3   5   7   9
B      2   4   6   8   0</code>
登录后复制

解决方案:

要转置包含多个列的表格,您可以结合使用 UNPIVOT 和 PIVOT 函数。

  1. UNPIVOT: 将多列 (A, B) 转换为行,并添加一列用于表示列名:
<code class="language-sql">select day, col, value
from yourtable
unpivot
(
  value
  for col in (A, B)
) unpiv</code>
登录后复制
  1. PIVOT: 将 "day" 值转换为列,并聚合 "value" 列:
<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>
登录后复制

这将生成所需的转置表。

附加说明:

  • 如果您的 SQL Server 版本为 2008 或更高版本,您可以使用 CROSS APPLY 和 VALUES 来代替 UNPIVOT 函数转置数据:
<code class="language-sql">select *
from
(
  select day, col, value
  from yourtable
  cross apply
  (
    values ('A', ACalls), ('B', BCalls)
  ) c (col, value)
) src
pivot
(
  max(value)
  for day in (Mon, Tue, Wed, Thu, Fri)
) piv</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>
登录后复制

以上是如何转置具有多列的 SQL 表?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板