”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何使用枢轴函数将行转换为SQL Server中的列?

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

发布于2025-03-22
浏览:894

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

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

问题

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

解决方法

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

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

select *
from 
(
  select store, week, xCount
  from yt 
) src
pivot
(
  sum(xcount)
  for week in ([1], [2], [3])
) piv;

动态生成透视列值:

为了处理未知的列值(例如动态的周数),可以使用动态 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);

结果:

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

| 商店 | 1 | 2 | 3 |

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

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3