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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-25 12:26:08327浏览

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

背景:

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

解决方案:

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

1. 静态周数:

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

<code class="language-sql">SELECT *
FROM
(
  SELECT store, week, xCount
  FROM yt
) src
PIVOT
(
  SUM(xcount)
  FOR week IN ([1], [2], [3])
) piv;</code>

2. 动态周数:

如果周数是动态的,请使用动态 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>

结果:

这两个查询都返回一个透视表,商店编号在左侧,周数在顶部。每个单元格包含对应商店和周数的“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