首页 > 数据库 > mysql教程 > 如何使用动态透视在 T-SQL 中动态透视数据?

如何使用动态透视在 T-SQL 中动态透视数据?

Patricia Arquette
发布: 2025-01-14 20:11:43
原创
341 人浏览过

How to Dynamically Pivot Data in T-SQL Using a Dynamic Pivot?

使用动态枢轴在 T-SQL 中转换数据

有时需要将数据从宽格式转换为更结构化的表格格式。考虑这样一种情况:一个表包含多个不同数据类型和值的列,需要动态地透视数据以获得一个结果集,该结果集为每个 ID 和相应的列值提供不同的行。

实现此转换的一种方法是使用 T-SQL 的动态枢轴功能。以下示例演示如何使用 T-SQL 动态地透视数据:

<code class="language-sql">CREATE TABLE #Table (
        ID INT,
        ColumnName VARCHAR(250),
        Value VARCHAR(250)
);

-- 示例数据
INSERT INTO #Table SELECT 1,'name','Peter'; 
INSERT INTO #Table SELECT 1,'phone','12345678'; 
INSERT INTO #Table SELECT 1,'email','[email protected]'; 
INSERT INTO #Table SELECT 2,'name','John'; 
INSERT INTO #Table SELECT 2,'phone','87654321'; 
INSERT INTO #Table SELECT 2,'email','[email protected]'; 
INSERT INTO #Table SELECT 3,'name','Sarah'; 
INSERT INTO #Table SELECT 3,'phone','55667788'; 
INSERT INTO #Table SELECT 3,'email','[email protected]'; 

DECLARE @cols NVARCHAR(2000);
DECLARE @query NVARCHAR(4000);

-- 动态构建枢轴的列列表
SELECT  @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT 
                                '],[' + t.ColumnName 
                        FROM    #Table AS t 
                        -- 按 ID 排序以确保列顺序一致
                        ORDER BY '],[' + CAST(t.ID AS VARCHAR(10)) 
                        FOR XML PATH('') 
                      ), 1, 2, '') + ']' 

SELECT  @cols;

-- 动态构建 PIVOT 查询
SET @query = N'SELECT ID,'+ @cols +' FROM 
(SELECT t1.ID,t1.ColumnName , t1.Value FROM #Table AS t1) p 
PIVOT (MAX([Value]) FOR ColumnName IN ( '+ @cols +' )) 
AS pvt;'; 

-- 执行动态 PIVOT 查询
EXECUTE(@query);

-- 删除临时表
DROP TABLE #Table;</code>
登录后复制

执行上述脚本的结果将是一个透视表,其中包含每个 ID 和相应列值的不同的行。

以上是如何使用动态透视在 T-SQL 中动态透视数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

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