首页 > 数据库 > mysql教程 > 如何使用SQL Server的Pivot函数将行枢轴排入列中,并处理静态和动态周数?

如何使用SQL Server的Pivot函数将行枢轴排入列中,并处理静态和动态周数?

Mary-Kate Olsen
发布: 2025-01-25 12:26:08
原创
375 人浏览过

SQL Server 的 PIVOT 函数:将行转换为列,处理静态和动态周数

背景:

您有一个包含多个列的临时表,包括商店编号、周数和相应的总计。周数是动态的,这使得将数据透视到表格格式变得具有挑战性。

解决方案:

要在 SQL Server 中使用 PIVOT 函数将行转换为列,请按照以下步骤操作:

1. 静态周数:

如果周数已知,请使用以下硬编码查询:

SELECT *
FROM
(
  SELECT store, week, xCount
  FROM yt
) src
PIVOT
(
  SUM(xcount)
  FOR week IN ([1], [2], [3])
) piv;
登录后复制

2. 动态周数:

如果周数是动态的,请使用动态 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);
登录后复制

结果:

这两个查询都返回一个透视表,商店编号在左侧,周数在顶部。每个单元格包含对应商店和周数的“xCount”之和。

<code>| STORE |   1 |   2 |   3 |
---------------------------
|   101 | 138 | 282 | 220 |
|   102 |  96 | 212 | 123 |
|   105 |  37 |  78 |  60 |
|   109 |  59 |  97 |  87 |</code>
登录后复制

How Can I Pivot Rows into Columns Using SQL Server's PIVOT Function, Handling Both Static and Dynamic Week Numbers?

以上是如何使用SQL Server的Pivot函数将行枢轴排入列中,并处理静态和动态周数?的详细内容。更多信息请关注PHP中文网其他相关文章!

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