首页 > 数据库 > mysql教程 > SQL Server 的 PIVOT 运算符如何将多列数据重塑为面向行的格式?

SQL Server 的 PIVOT 运算符如何将多列数据重塑为面向行的格式?

Mary-Kate Olsen
发布: 2024-12-25 18:36:13
原创
619 人浏览过

How can SQL Server's PIVOT operator reshape data from multiple columns into a row-oriented format?

揭开 SQL Server 中 PIVOT 的秘密

我们经常会遇到一些数据集,其中数据的结构化方式使得分析变得困难并以有意义的形式呈现。当数据被组织成多个列时,就会出现这样的一种情况,每个列代表特定类别的不同值。要将这些数据集转换为以类别为列、值为行的表,我们可以在 SQL Server 中使用 PIVOT 运算符。

让我们考虑一个场景,其中我们有一个名为“mytable”、列为“Name1”的表、“名称2”和“值”。此表中的数据代表与不同名称(“A”和“B”)关联的各种值(“P1”、“P2”、“P3”、“P4”):

Name1  Name2  Value
A      P1     1
A      P2     1
A      P3     2
B      P1     3
B      P2     1
B      P4     1
登录后复制

我们的目标是将这些数据重组为以下格式:

       A     B
P1     1     4
P2     1     1
P3     2     NULL
P4     NULL  1
登录后复制

在 SQL Server 2005 中,我们可以利用动态查询构造来使用 PIVOT 来完成此转换。以下是分步指南:

  1. 组装以逗号分隔的列名称字符串: 执行以下查询以创建一个包含所有不同“Name1”的字符串" 值之间用逗号:

    DECLARE @cols VARCHAR(1000)
    SELECT  @cols = STUFF(( SELECT distinct  ',' + QuoteName([Name1])
                         FROM myTable FOR XML PATH('') ), 1, 1, '') 
    登录后复制
  2. 构造动态 SQL 查询: 创建一个名为 @sqlquery 的变量,并为其分配以下查询模板:

    DECLARE @sqlquery VARCHAR(2000)
    SET @sqlquery = 'SELECT * FROM
       (SELECT Name2, Name1, Value
        FROM myTable ) base
        PIVOT (Sum(Value) FOR [Name1]
        IN (' + @cols + ')) AS finalpivot'
    登录后复制
  3. 执行动态查询:使用以下命令执行@sqlquery变量EXECEUTE (@sqlquery) 生成数据透视表。

此方法根据“Name1”列中的不同值动态构造 PIVOT 子句。 PIVOT 函数对每个“Name1”类别的“Value”列求和,结果是一个表格,其中“Name2”值用作行标题,“Name1”类别形成列标题。

作为一般根据规则,每当您需要将数据从面向列的结构转换为面向行的结构时,都可以使用 PIVOT。该技术可以显着简化数据分析和演示任务。

以上是SQL Server 的 PIVOT 运算符如何将多列数据重塑为面向行的格式?的详细内容。更多信息请关注PHP中文网其他相关文章!

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