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

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

Barbara Streisand
发布: 2025-01-14 21:11:50
原创
595 人浏览过

How to Transpose a Table with Multiple Columns in SQL Server?

SQL Server多列表数据透视方法

在多种情况下,将表转换为其转置形式都非常有用。本文重点介绍如何在Microsoft SQL Server中转置具有多个列(A、B等)的表。

使用UNPIVOT和PIVOT进行数据透视

要转置表,您可以结合使用UNPIVOT和PIVOT函数:

  • UNPIVOT: 将多列转换为行,创建一个名为col的新列,其中包含列名(A、B等),以及一个包含对应值的value列。
  • PIVOT: 将col值转换为列标题,并为每个标题汇总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方法

对于SQL Server 2008及以上版本,您还可以使用CROSS APPLY与VALUES组合来解开数据:

<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>
登录后复制

这会将ACalls和BCalls列转置为行,并为每周的每一天(Mon、Tue等)创建列标题。

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

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