首页 > 数据库 > mysql教程 > 如何使用枢轴函数将行转换为SQL Server中的列?

如何使用枢轴函数将行转换为SQL Server中的列?

Barbara Streisand
发布: 2025-01-25 12:32:10
原创
648 人浏览过

How to Convert Rows to Columns in SQL Server Using the PIVOT Function?

使用 SQL Server 中的 PIVOT 函数将行转换为列

问题

SQL Server 中的数据透视表提供了一种强大的方法,可以将数据从行转置为列。但是,用户在构建正确的查询时可能会遇到挑战。

解决方法

针对已知列值使用 PIVOT 函数:

对于预定义的列值(在本例中为周数),可以直接使用 PIVOT 函数:

<code class="language-sql">select *
from 
(
  select store, week, xCount
  from yt 
) src
pivot
(
  sum(xcount)
  for week in ([1], [2], [3])
) piv;</code>
登录后复制

动态生成透视列值:

为了处理未知的列值(例如动态的周数),可以使用动态 SQL 和窗口函数的组合:

<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ',' + QUOTENAME(Week) 
                    from yt
                    group by Week
                    order by Week
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT store,' + @cols + ' from 
             (
                select store, week, xCount
                from yt
            ) x
            pivot 
            (
                sum(xCount)
                for week in (' + @cols + ')
            ) p '

execute(@query);</code>
登录后复制

结果:

两种方法都产生相同的结果:

| 商店 | 1 | 2 | 3 |

| 101 | 138 | 282 | 220 |
| 102 | 96 | 212 | 123 |
| 105 | 37 | 78 | 60 |
| 109 | 59 | 97 | 87 |

以上是如何使用枢轴函数将行转换为SQL Server中的列?的详细内容。更多信息请关注PHP中文网其他相关文章!

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